gcc nie działa już po aktualizacji

8

Jako przykład:

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.

Zgaduję gdzieś po drodze po próbie naprawienia komunikatu o błędzie:

/ usr / bin / ld: nie można znaleźć crt1.o: Brak takiego pliku lub katalogu

Całkowicie zmiksowałem wszystko. Czy ktoś mógłby doradzić?

hsmyers
źródło
Czy masz już zainstalowany program libc-dev? Kompiluje się dobrze dla mnie.
itnet7,

Odpowiedzi:

10

Musisz zainstalować gcc-multilibpakiet, który przenosi 32-bitowe nagłówki do 64-bitowego systemu operacyjnego.

użytkownik576557
źródło
0

Działa to dla mnie dobrze, na świeżej instalacji onirycznej. /usr/include/x86_64-linux-gnu/bits/predefs.hjest dostarczany przez pakiet libc6-dev, być może nie jest poprawnie zainstalowany?

Możesz „ponownie zainstalować” ten pakiet za pomocą:

sudo apt-get install --reinstall libc6-dev

Jeśli jednak ten plik jest obecny, wygląda na to, że ścieżka wyszukiwania twojego kompilatora nie szuka odpowiedniego miejsca dla tego pliku. Możesz to sprawdzić, wykonując następujące czynności:

gcc --verbose -o hello hello.c

który powinien wydrukować ścieżkę wyszukiwania dla plików dołączanych. Mój mówi:

    #include <...> wyszukiwanie zaczyna się tutaj:
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     / usr / local / include
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     / usr / include / x86_64-linux-gnu
     / usr / include

Jeśli to nie to samo, powiedziałbym, że istnieje rozbieżność wersji między niektórymi waszymi pakietami niezbędnymi do kompilacji. Sprawdź, czy masz odpowiednie wersje pakietów gcc i libc6-dev. W tej chwili oneiric powinny to być:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 
Jeremy Kerr
źródło
wynikiem próby --verbose są:
hsmyers
Jak odpowiedzieć na odpowiedź? Minimalnie moja wersja GCC w wersji 4.7.0 jest wymieniona jako eksperymentalna. Nie mam pojęcia, jak to zostało zainstalowane. O ile mogę stwierdzić, libc6-dev jest zainstalowany. Moje ścieżki dołączania są podobne do: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include (również / include-fixed) ze standardowym / usr / local / include również. Nie mogę znaleźć ani bitów jako katalogu, ani bitów / predefs.h w nim zawartych. Spróbuję ponownie zainstalować i zobaczę, co się stanie.
hsmyers
Ponowna instalacja nie zrobiła różnicy. Znalezione bity w / usr / include / i386-linux-gnu / bits, nie pokazane jako część GCC zawierają ścieżki. Moja wersja libc6-dev pasuje do twojej.
hsmyers,
Sugeruję, że twoim problemem jest eksperymentalna (i niestandardowa wersja Ubuntu) gcc. Sugeruję usunięcie tego i zainstalowanie 4.6.1 z archiwum.
Jeremy Kerr
Prawie to, co myślałem --- oprócz małego problemu niewiedzy a) jak się tam dostał i b) jak go usunąć. Czy apt-get remove gcc zadziała? Czy będę potrzebować pełnej nazwy pakietu? Być może i686-pc-linux-gnu-4.7.0?
hsmyers
0

Miałem ten sam problem z moim kompilatorem avr-gcc.

Połączyłem pliki i foldery w / usr / include / i386-linux-gnu / z folderem, w którym avr-gcc szuka plików -file. Na przykład: / usr / lib / avr / include /

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

Może coś podobnego działa w przypadku gcc. Do

Benibr
źródło