Ошибка «gnu / stubs-32.h: нет такого файла или каталога» при компиляции исходного кода Nachos - PullRequest
158 голосов
/ 14 сентября 2011

Я пытаюсь установить Nachos на свой ноутбук, и на нем установлена ​​Ubuntu 11.04.

Код написан на C и поэтому для его сборки я предполагаю, что мне понадобится кросс-компилятор.Вот где моя проблема.Я скачал исходный код кросс-компилятора MIPS с помощью команды

  wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz

и разархивировал его с помощью

tar zxvf mips-decstation.linux-xgcc.gz      

Это нормально, но когда я пытаюсь собрать исходный кодnachos os, используя make, я получаю эту ошибку -

/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory compilation terminated. make: *** [bitmap.o] Error 1

Я пытаюсь следовать приведенным здесь инструкциям - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm и все работает нормально, кроме случаев, когда я пытаюсь использовать make.

Ответы [ 10 ]

326 голосов
/ 14 сентября 2011

Вам не хватает 32-битного пакета libc dev:

В Ubuntu она называется libc6-dev-i386 - do sudo apt-get install libc6-dev-i386. Ниже приведены дополнительные инструкции для Ubuntu 12.04.

На дистрибутивах Red Hat , имя пакета glibc-devel.i686 (благодаря комментарию Дэвида Гарднера).

Вкл. CentOS 5.8 , имя пакета glibc-devel.i386 (благодаря комментарию ДжимКлека).

Вкл. CentOS 6/7 , имя пакета glibc-devel.i686.

На SLES он называется glibc-devel-32bit - do zypper in glibc-devel-32bit.

Вкл. Gentoo он называется sys-libs/glibc - сделать emerge -1a sys-libs/gcc [ source ] (Примечание: можно использовать equery, чтобы подтвердить, что это правильно; сделайте equery belongs belongs /usr/include/gnu/stubs-32.h)

На ArchLinux , имя пакета: lib32-glibc - do pacman -S lib32-glibc.


Используете ли вы Ubuntu 12.04 ? Существует известная проблема, которая помещает файлы в нестандартное местоположение . Вам нужно будет также сделать:

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

где-то перед сборкой (скажем, в вашем .bashrc).


Если вы также компилируете код C ++, вам также понадобится 32-битная библиотека stdc ++. Если вы видите это предупреждение:

.... / usr / bin / ld: не удается найти -lstdc ++ ....

На Ubuntu вам нужно будет сделать sudo apt-get install g++-multilib

На CentOS 5 вам нужно будет сделать yum install libstdc++-devel.i386

На CentOS 6 вам нужно будет сделать yum install libstdc++-devel.i686

Пожалуйста, не стесняйтесь редактировать в пакетах для других систем.

54 голосов
/ 21 января 2013

С сайта GNU UPC :

Сборка компилятора завершается с фатальной ошибкой: gnu / stubs-32.h: Нет такого файла или каталог

Это сообщение об ошибке отображается в 64-битных системах, где GCC / UPC функция multilib включена, и это означает, что 32-битная версия libc не установлен. Есть два способа исправить эту проблему:

  • Установить 32-битную версию glibc (например, glibc-devel.i686 в Fedora, CentOS, ..)
  • Отключить сборку 'multilib', указав "--disable-multilib" включить команду настройки компилятора
9 голосов
/ 14 сентября 2011

Попробуйте выполнить sudo apt-get install libc6-dev.

apt-file, чтобы сообщить мне, что рассматриваемый файл принадлежит этому пакету.

7 голосов
/ 05 сентября 2013

Это теперь в FAQ по вики GCC, см. http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h

2 голосов
/ 29 марта 2013

Я получаю следующую ошибку на коробке fedora 18:


1./usr/include/gnu/stubs.h:7:27: фатальная ошибка: gnu / stubs-32.h: Компиляция такого файла или каталога не прекращена.

Я установил glibc.i686 и glibc-devel.i686, то компиляция завершилась ошибкой:

2./ usr / bin / ld: пропуск несовместимого /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so при поиске -lgcc_s / usr / bin / ld: невозможно найти -lgcc_s collect2: error: ldвернул 1 состояние выхода

Решение:

Я установил (yum install) glibc.i686 glibc-devel.i386 и libgcc.i686, чтобы избавиться от проблемы компиляции.

Теперь компиляция для 32-битной (-m32) работает нормально.

1 голос
/ 20 февраля 2013

Хм, я на Ubuntu 12.04, и я получил ту же ошибку при попытке скомпилировать gcc 4.7.2

Я попытался установить пакет libc6-dev-i386 и получил следующее:

Package libc6-dev-i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'libc6-dev-i386' has no installation candidate

Я также установил правильные переменные окружения в bash:

export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)

однако, я все еще получал ошибку, тогда я просто скопировал stubs-32.h туда, где gcc ожидал найти ее после выполнения быстрого сравнения:

vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ./: stubs-32.h
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ sudo cp stubs-32.h ../../gnu/
[sudo] password for vic: 
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$

Сейчас он компилируется, посмотрим, будет ли он больше жаловаться ...

0 голосов
/ 21 июня 2018

Если вы столкнулись с этой проблемой в терминале Mac-OSX с python, попробуйте обновить версии пакетов, которые вы используете.Итак, перейдите к своим файлам в python и там, где вы указали пакеты, обновите их до последних версий, доступных в Интернете.

0 голосов
/ 30 января 2015

# sudo apt-get install g ++ - multilib

Следует исправить эту ошибку на 64-битных машинах (Debian / Ubuntu).

0 голосов
/ 13 сентября 2013

gnu/stubs-32.h не включено в программы.Это заголовочный файл внутреннего типа gnu/stubs.h, такой же, как gnu/stubs-64.h.Вы можете установить пакет multilib, чтобы добавить оба.

0 голосов
/ 14 сентября 2011

FWIW, пахнет как ошибка (или, по крайней мере, потенциальный источник будущей боли) при использовании файлов из / usr / include при кросс-компиляции.

...