gcc ya no funciona después de la actualización

8

Como ejemplo:

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.

Supongo que en algún lugar del camino después de intentar corregir el mensaje de error:

/ usr / bin / ld: no se puede encontrar crt1.o: no existe tal archivo o directorio

He estropeado las cosas por completo. ¿Alguien podría aconsejarme?

hsmyers
fuente
¿Ya tienes instalado libc-dev? Se compila bien para mí.
itnet7

Respuestas:

10

Necesita instalar el gcc-multilibpaquete que trae encabezados específicos de 32 bits a su sistema operativo de 64 bits.

user576557
fuente
0

Esto funciona bien para mí, en una nueva instalación onírica. /usr/include/x86_64-linux-gnu/bits/predefs.hes proporcionado por el paquete libc6-dev, ¿tal vez eso no está instalado correctamente?

Puede "reinstalar" ese paquete con:

sudo apt-get install --reinstall libc6-dev

Sin embargo, si ese archivo está presente, entonces parece que la ruta de búsqueda de su compilador no está buscando el archivo en el lugar correcto. Puede verificar ejecutando lo siguiente:

gcc --verbose -o hello hello.c

que debe imprimir la ruta de búsqueda para incluir archivos. El mío dice:

    #include <...> la búsqueda comienza aquí:
     /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 eso no es lo mismo, diría que hay una discrepancia de versión entre algunos de sus paquetes esenciales de compilación. Comprueba que tienes las versiones correctas de los paquetes gcc y libc6-dev. En este momento en oneiric, estos deberían ser:

gcc           4:4.6.1-2ubuntu5
libc6-dev     2.13-20ubuntu5 
Jeremy Kerr
fuente
resultado del intento --verbose son:
hsmyers
¿Cómo respondo a una respuesta? Como mínimo, mi versión de GCC es 4.7.0 enumerada como experimental. No tengo idea de cómo se instaló. Hasta donde puedo decir, libc6-dev está instalado. Mis rutas de inclusión son similares a: /usr/local/lib/gcc/i686-pc-linux-gnu/4.7.0/include (también / include-fixed) con el estándar / usr / local / include también. No puedo encontrar bits como un directorio o bits / predefs.h dentro de él. Intentaré reinstalar y ver qué pasa.
hsmyers
Reinstalar no hizo ninguna diferencia. Los bits encontrados en / usr / include / i386-linux-gnu / bits, no se muestran como parte de las rutas de inclusión de GCC. Mi versión de libc6-dev coincide con la tuya.
hsmyers
Sugeriría que la versión experimental (y no estándar de Ubuntu) de gcc es su problema. Sugeriría eliminar eso e instalar 4.6.1 del archivo.
Jeremy Kerr el
Más o menos lo que estaba pensando, excepto el pequeño problema de no saber a) cómo llegó allí yb) cómo eliminarlo. ¿Funcionará apt-get remove gcc? ¿O necesitaré el nombre completo del paquete? ¿Quizás i686-pc-linux-gnu-4.7.0?
hsmyers
0

Tuve el mismo problema con mi compilador avr-gcc.

Enlacé los archivos y carpetas en / usr / include / i386-linux-gnu / a una carpeta en la que avr-gcc busca -files. Por ejemplo: / usr / lib / avr / include /

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

Quizás algo similar funcione para gcc. A

Benibr
fuente