gcc ne fonctionne plus après la mise à niveau

8

Par exemple:

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.

À une estimation quelque part en cours de route après avoir essayé de corriger le message d'erreur:

/ usr / bin / ld: impossible de trouver crt1.o: aucun fichier ou répertoire de ce type

J'ai complètement foutu les choses. Quelqu'un pourrait-il s'il vous plaît conseiller?

hsmyers
la source
Avez-vous déjà installé libc-dev? Ça compile très bien pour moi.
itnet7

Réponses:

10

Vous devez installer un gcc-multilibpackage qui apporte des en-têtes spécifiques 32 bits à votre système d'exploitation 64 bits.

user576557
la source
0

Cela fonctionne bien pour moi, sur une nouvelle installation onirique. /usr/include/x86_64-linux-gnu/bits/predefs.hest fourni par le paquet libc6-dev, peut-être qui n'est pas installé correctement?

Vous pouvez "réinstaller" ce package avec:

sudo apt-get install --reinstall libc6-dev

Cependant, si ce fichier est présent, il semble que le chemin de recherche de votre compilateur ne cherche pas au bon endroit pour ce fichier. Vous pouvez vérifier en exécutant ce qui suit:

gcc --verbose -o hello hello.c

qui devrait imprimer le chemin de recherche des fichiers d'inclusion. Le mien dit:

    #include <...> la recherche commence ici:
     /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

Si ce n'est pas la même chose, je dirais qu'il existe une incompatibilité de version entre certains de vos packages essentiels à la construction. Vérifiez que vous disposez des bonnes versions des packages gcc et libc6-dev. En ce moment sur oniric, ceux-ci devraient être:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 
Jeremy Kerr
la source
résultat de la tentative --verbose sont:
hsmyers
Comment répondre à une réponse? Au minimum, ma version de GCC est 4.7.0 répertoriée comme expérimentale. Je ne sais pas comment il a été installé. Pour autant que je sache, libc6-dev est installé. Mes chemins d'inclusion sont similaires à: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include (également / include-fixed) avec le standard / usr / local / include également. Je ne trouve ni bits en tant que répertoire ni bits / predefs.h dedans. Je vais essayer de réinstaller et voir ce qui se passe.
hsmyers
La réinstallation n'a fait aucune différence. Les bits trouvés dans / usr / include / i386-linux-gnu / bits, non représentés dans le cadre des chemins d'inclusion GCC. Ma version de libc6-dev correspond à la vôtre.
hsmyers
Je dirais que la version expérimentale (et non standard Ubuntu) de gcc est votre problème. Je suggère de supprimer cela et d'installer 4.6.1 de l'archive.
Jeremy Kerr
À peu près ce que je pensais --- à l'exception du petit problème de ne pas savoir a) comment il est arrivé là-bas et b) comment l'enlever. Est-ce qu'un apt-get supprimer gcc fonctionnera? Ou aurai-je besoin du nom complet du package? Peut-être i686-pc-linux-gnu-4.7.0?
hsmyers
0

J'ai eu le même problème avec mon compilateur avr-gcc.

J'ai lié les fichiers et dossiers dans / usr / include / i386-linux-gnu / à un dossier dans lequel avr-gcc recherche les fichiers. Par exemple: / usr / lib / avr / include /

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

Peut-être que quelque chose de similaire fonctionne pour gcc. À

Benibr
la source