gcc non funziona più dopo l'aggiornamento


8

Come esempio:

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.

A indovinare da qualche parte lungo la strada dopo aver provato a correggere il messaggio di errore:

/ usr / bin / ld: impossibile trovare crt1.o: nessun file o directory

Ho combinato completamente le cose. Qualcuno potrebbe avvisare per favore?


Hai già installato libc-dev? Compila bene per me.
itnet7,

Risposte:


10

È necessario installare un gcc-multilibpacchetto che porta intestazioni specifiche a 32 bit al sistema operativo a 64 bit.


0

Questo funziona bene per me, su una nuova installazione onirica. /usr/include/x86_64-linux-gnu/bits/predefs.hè fornito dal pacchetto libc6-dev, forse non è installato correttamente?

Puoi "reinstallare" quel pacchetto con:

sudo apt-get install --reinstall libc6-dev

Tuttavia, se quel file è presente, allora sembra che il percorso di ricerca del tuo compilatore non stia cercando il posto giusto per quel file. È possibile verificare eseguendo quanto segue:

gcc --verbose -o hello hello.c

che dovrebbe stampare il percorso di ricerca per i file include. Il mio dice:

    #include <...> la ricerca inizia qui:
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include
     / usr / local / includono
     /usr/lib/gcc/x86_64-linux-gnu/4.6.1/include-fixed
     / Usr / include / x86_64-linux-gnu
     / Usr / include

Se non è lo stesso, direi che esiste una discrepanza di versione tra alcuni dei tuoi pacchetti build-essential. Verifica di avere le versioni giuste dei pacchetti gcc e libc6-dev. In questo momento su onirico, questi dovrebbero essere:

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

risultato del tentativo --verbose sono:
hsmyers,

Come rispondo a una risposta? Come minimo, la mia versione di GCC è elencata come sperimentale 4.7.0. Non ho idea di come sia stato installato. Per quanto ne so, è installato libc6-dev. I miei percorsi include sono simili a: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include (anche / include-fixed) con lo standard / usr / local / include pure. Non riesco a trovare bit come directory o bit / predefs.h al suo interno. Proverò a reinstallare e vedrò cosa succede.
hsmyers,

Reinstalla non ha fatto differenza. I bit trovati in / usr / include / i386-linux-gnu / bits, non mostrati come parte di GCC includono i percorsi. La mia versione di libc6-dev corrisponde alla tua.
hsmyers,

Suggerirei che la versione sperimentale (e non standard di Ubuntu) di gcc sia il tuo problema. Suggerirei di rimuoverlo e installare 4.6.1 dall'archivio.
Jeremy Kerr,

Praticamente quello che stavo pensando --- tranne il piccolo problema di non sapere a) come è arrivato eb) come rimuoverlo. Un apt-get remove gcc funzionerà? O avrò bisogno del nome del pacchetto completo? Forse i686-pc-linux-gnu-4.7.0?
hsmyers,

0

Ho avuto lo stesso problema con il mio compilatore avr-gcc.

Ho collegato i file e le cartelle in / usr / include / i386-linux-gnu / a una cartella in cui avr-gcc cerca i file. Ad esempio: / usr / lib / avr / include /

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

Forse qualcosa di simile funziona per gcc. Per

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.