ubuntu gcc mips cross-compiling nachos

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.



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).