ubuntu - Error "gnu/stubs-32.h: No existe tal archivo o directorio" al compilar el código fuente de Nachos
gcc mips (9)
Estoy tratando de instalar Nachos en mi computadora portátil y tengo Ubuntu 11.04 en la computadora portátil.
El código está en C y entonces para construirlo, supongo que necesitaré un compilador cruzado. Aquí es donde está mi problema. Descargué el código fuente del compilador cruzado MIPS usando el comando
wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz
y lo descomprimí usando
tar zxvf mips-decstation.linux-xgcc.gz
Esto está bien, pero cuando trato de construir el código fuente del sistema operativo nachos, utilizando make, obtengo este error:
/usr/include/gnu/stubs.h:7:27: fatal error: gnu/stubs-32.h: No such file or directory compilation terminated. make: *** [bitmap.o] Error 1
Estoy tratando de seguir las instrucciones que se dan aquí - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm y todo está funcionando bien, excepto cuando trato de usar make.
Desde el sitio web de GNU UPC :
La compilación del compilador falla con un error fatal: gnu / stubs-32.h: No existe tal archivo o directorio
Este mensaje de error aparece en los sistemas de 64 bits donde la función multilibro GCC / UPC está habilitada e indica que la versión de 32 bits de libc no está instalada. Hay dos formas de corregir este problema:
- Instale la versión de 32 bits de glibc (por ejemplo, glibc-devel.i686 en Fedora, CentOS, ..)
- Inhabilite la compilación ''multilib'' suministrando el modificador "--disable-multilib" en el comando de configuración del compilador
Estaba obteniendo un error de seguimiento en una caja de fedora 18:
1. /usr/include/gnu/stubs.h:7:27: error fatal: gnu / stubs-32.h: no se finalizó la compilación de ese archivo o directorio.
Instalé glibc.i686 y glibc-devel.i686, luego la compilación falló con el siguiente error:
2. / usr / bin / ld: omitiendo incompatible /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so al buscar -lgcc_s / usr / bin / ld: no se puede encontrar -lgcc_s collect2: error : LD devolvió el código de salida 1
Solución:
Instalé (yum install) glibc.i686 glibc-devel.i386 y libgcc.i686 para deshacerme del problema de compilación.
Ahora la compilación de 32 bits (-m32) funciona bien.
Esto está ahora en las preguntas frecuentes de wiki de GCC, ver http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h
FWIW, huele como un error (o al menos una posible fuente de dolor en el futuro) para usar archivos de / usr / include cuando se compila de forma cruzada.
Hmm, estoy en Ubuntu 12.04 y obtuve el mismo error cuando intento compilar gcc 4.7.2
Intenté instalar el paquete libc6-dev-i386
y obtuve lo siguiente:
Package libc6-dev-i386 is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package ''libc6-dev-i386'' has no installation candidate
También configuré las variables de entorno correctas en bash:
export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
sin embargo, todavía estaba recibiendo el error, simplemente copié los stubs-32.h
en donde gcc esperaba encontrarlo después de hacer un diff rápido:
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ./: stubs-32.h
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ sudo cp stubs-32.h ../../gnu/
[sudo] password for vic:
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ../../gnu: stubs-64.h
vic@ubuntu:/usr/include/i386-linux-gnu/gnu$
Está compilando ahora, veamos si se queja más ...
Intenta hacer un sudo apt-get install libc6-dev
.
apt-file
me dice que el archivo en cuestión pertenece a ese paquete.
Te estás perdiendo el paquete de desarrollo libc de 32 bits:
En Ubuntu se llama libc6-dev-i386 - do sudo apt-get install libc6-dev-i386
. Vea a continuación las instrucciones adicionales para Ubuntu 12.04.
En las distribuciones de Red Hat , el nombre del paquete es glibc-devel.i686
(Gracias al comentario de David Gardner)
En CentOS 5.8 , el nombre del paquete es glibc-devel.i386
(Gracias al comentario de JimKleck)
En CentOS glibc-devel.i686
, el nombre del paquete es glibc-devel.i686
.
En SLES se llama glibc-devel-32bit - do zypper in glibc-devel-32bit
¿Estás usando Ubuntu 12.04 ? Existe un problema conocido que coloca los archivos en una ubicación no estándar . También necesitarás hacer:
export LIBRARY_PATH=/usr/lib/$(gcc -print-multiarch)
export C_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
export CPLUS_INCLUDE_PATH=/usr/include/$(gcc -print-multiarch)
en algún lugar antes de construir (digamos en tu .bashrc).
Si también está compilando código C ++, también necesitará la biblioteca stdc ++ de 32 bit. Si ve esta advertencia:
.... / usr / bin / ld: no se puede encontrar -lstdc ++ ....
En Ubuntu necesitarás hacer sudo apt-get install g++-multilib
En CentOS 5 necesitarás hacer yum install libstdc++-devel.i386
En CentOS 6 necesitarás hacer yum install libstdc++-devel.i686
Por favor, siéntase libre de editar en los paquetes para otros sistemas.
gnu/stubs-32.h
no se dirige incluido en programms. Es un archivo de cabecera de tipo back-end de gnu/stubs.h
, al igual que gnu/stubs-64.h
. Puede instalar el paquete multilib
para agregar ambos.
# sudo apt-get install g ++ - multilib
Debería corregir este error en máquinas de 64 bits (Debian / Ubuntu).