gcc больше не работает после обновления

8

Например:

hsmyers@ubuntu:~/c_dev$ cat hello.c
#include <stdio.h>

int main(int argc,char **argv) {
printf("Hello World!\n");
return 0;
}
hsmyers@ubuntu:~/c_dev$ gcc -c -o hello.o hello.c
In file included from /usr/include/stdio.h:28:0,
             from hello.c:1:
/usr/include/features.h:323:26: fatal error: bits/predefs.h: No such file or directory
compilation terminated.

В предположении где-то по пути после попытки исправить сообщение об ошибке:

/ usr / bin / ld: невозможно найти crt1.o: такого файла или каталога нет

Я напортачил полностью. Может ли кто-нибудь, пожалуйста, посоветовать?

hsmyers
источник
У вас уже установлена ​​библиотека libc-dev? Это хорошо для меня.
itnet7

Ответы:

10

Вам необходимо установить gcc-multilibпакет, который доставит 32-битные заголовки в вашу 64-битную операционную систему.

user576557
источник
0

Это отлично работает для меня, на новой установке Oneiric. /usr/include/x86_64-linux-gnu/bits/predefs.hпредоставляется пакетом libc6-dev, возможно, он установлен неправильно?

Вы можете «переустановить» этот пакет с помощью:

sudo apt-get install --reinstall libc6-dev

Однако, если этот файл присутствует, то похоже, что путь поиска вашего компилятора не находится в нужном месте для этого файла. Вы можете проверить, запустив следующее:

gcc --verbose -o hello hello.c

который должен напечатать путь поиска для включаемых файлов. Моя говорит:

    #include <...> поиск начинается здесь:
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     / USR / местные / включить
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     / USR / включать / x86_64-Linux-гну
     / USR / включать в себя

Если это не то же самое, я бы сказал, что между некоторыми из ваших пакетов, необходимых для сборки, есть несоответствие версий. Убедитесь, что у вас есть правильные версии пакетов gcc и libc6-dev. Прямо сейчас на oneiric это должно быть:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 
Джереми Керр
источник
Результатом попытки --verbose являются:
hsmyers 25.11.11
Как мне ответить на ответ? Как минимум, моя версия GCC 4.7.0 указана как экспериментальная. Я понятия не имею, как это было установлено. Насколько я могу судить, libc6-dev установлен. Мои пути включения похожи на: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include (также / include-fixed) со стандартом / usr / local / include. Я не могу найти ни биты в качестве каталога, ни биты / prevfs.h внутри него. Я попробую переустановить и посмотрю, что произойдет.
hsmyers
Переустановка без разницы. Найденные биты в / usr / include / i386-linux-gnu / bits, не показанные как часть путей включения GCC. Моя версия libc6-dev соответствует вашей.
hsmyers
Я бы предположил, что экспериментальная (и не Ubuntu-стандартная) версия gcc является вашей проблемой. Я бы предложил удалить это и установить 4.6.1 из архива.
Джереми Керр
Почти то, о чем я думал - исключая небольшую проблему не зная а) как он туда попал и б) как его убрать. Будет ли работать apt-get remove gcc? Или мне нужно полное имя пакета? Возможно, i686-pc-linux-gnu-4.7.0?
hsmyers
0

У меня была такая же проблема с моим компилятором avr-gcc.

Я связал файлы и папки в / usr / include / i386-linux-gnu / с папкой, в которой avr-gcc ищет -files. Например: / usr / lib / avr / include /

ln -s /usr/include/i386-linux-gnu/* /usr/lib/avr/include/

Может быть, что-то подобное работает для GCC. к

Benibr
источник