gcc funktioniert nach dem Upgrade nicht mehr


8

Als Beispiel:

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.

Irgendwo auf dem Weg nach dem Versuch, die Fehlermeldung zu beheben:

/ usr / bin / ld: crt1.o kann nicht gefunden werden: Keine solche Datei oder kein solches Verzeichnis

Ich habe die Dinge komplett durcheinander gebracht. Könnte jemand bitte beraten?


Haben Sie libc-dev bereits installiert? Es kompiliert gut für mich.
itnet7

Antworten:


10

Sie müssen ein gcc-multilibPaket installieren , das 32-Bit-spezifische Header auf Ihr 64-Bit-Betriebssystem bringt.


0

Dies funktioniert gut für mich, bei einer neuen Oneiric-Installation. /usr/include/x86_64-linux-gnu/bits/predefs.hwird vom libc6-dev-Paket bereitgestellt, vielleicht ist das nicht richtig installiert?

Sie können dieses Paket "neu installieren" mit:

sudo apt-get install --reinstall libc6-dev

Wenn diese Datei jedoch vorhanden ist, sieht es so aus, als würde der Suchpfad Ihres Compilers nicht an der richtigen Stelle für diese Datei suchen. Sie können dies überprüfen, indem Sie Folgendes ausführen:

gcc --verbose -o hello hello.c

Hiermit sollte der Suchpfad für Include-Dateien gedruckt werden. Meins sagt:

    #include <...> Suche beginnt hier:
     /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

Wenn dies nicht dasselbe ist, würde ich sagen, dass einige Ihrer Build-Essential-Pakete nicht mit der Version übereinstimmen. Überprüfen Sie, ob Sie die richtigen Versionen der Pakete gcc und libc6-dev haben. Im Moment sollten diese auf oneiric sein:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 

Ergebnis des --verbose-Versuchs sind:
hsmyers

Wie antworte ich auf eine Antwort? Minimal ist meine Version von GCC 4.7.0 als experimentell aufgeführt. Ich habe keine Ahnung, wie es installiert wurde. Soweit ich das beurteilen kann, ist libc6-dev installiert. Meine Include-Pfade ähneln: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include (auch / include-fixed) mit dem Standard / usr / local / include. Ich kann weder Bits als Verzeichnis noch Bits / Predefs.h darin finden. Ich werde die Neuinstallation versuchen und sehen, was passiert.
Hsmyers

Neuinstallation machte keinen Unterschied. Gefundene Bits unter / usr / include / i386-linux-gnu / bits, die nicht als Teil der GCC-Include-Pfade angezeigt werden. Meine Version von libc6-dev entspricht Ihrer.
Hsmyers

Ich würde vorschlagen, dass die experimentelle (und nicht Ubuntu-Standard) Version von gcc Ihr Problem ist. Ich würde vorschlagen, das zu entfernen und 4.6.1 aus dem Archiv zu installieren.
Jeremy Kerr

Ziemlich genau das, was ich dachte - mit Ausnahme des kleinen Problems, nicht zu wissen, a) wie es dort ankam und b) wie man es entfernt. Funktioniert ein apt-get remove gcc? Oder brauche ich den vollständigen Paketnamen? Vielleicht i686-pc-linux-gnu-4.7.0?
Hsmyers

0

Ich hatte das gleiche Problem mit meinem avr-gcc-Compiler.

Ich habe die Dateien und Ordner in / usr / include / i386-linux-gnu / mit einem Ordner verknüpft, in dem avr-gcc nach -files sucht. Zum Beispiel: / usr / lib / avr / include /

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

Vielleicht funktioniert etwas Ähnliches für gcc. Zu

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.