it-swarm.it

Errore "gnu / stubs-32.h: nessun file o directory" durante la compilazione del codice sorgente di Nachos

Sto cercando di installare Nachos sul mio portatile e ho Ubuntu 11.04 sul portatile.

Il codice è in C e quindi per costruirlo suppongo di aver bisogno di un cross-compilatore. Questo è il mio problema. Ho scaricato il codice sorgente del cross cross MIPS utilizzando il comando

  wget http://mll.csie.ntu.edu.tw/course/os_f08/assignment/mips-decstation.linux-xgcc.gz

e l'ho decompresso usando

tar zxvf mips-decstation.linux-xgcc.gz      

Va bene, ma quando provo a creare il codice sorgente del sistema nachos, usando make, ottengo questo errore -

/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

Sto cercando di seguire le istruzioni fornite qui - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm e tutto funziona bene tranne quando cerco di usare rendere.

157
Ashish Agarwal

Ti manca il pacchetto dev di libc a 32 bit:

On Ubuntu si chiama libc6-dev-i386 - do Sudo apt-get install libc6-dev-i386. Vedi sotto per ulteriori istruzioni per Ubuntu 12.04.

On Red Hat distro, il nome del pacchetto è glibc-devel.i686 (Grazie al commento di David Gardner).

On CentOS 5.8 , il nome del pacchetto è glibc-devel.i386 (Grazie al commento di JimKleck).

On CentOS 6/7 , il nome del pacchetto è glibc-devel.i686.

On SLES si chiama glibc-devel-32bit - do zypper in glibc-devel-32bit.

On Gentoo si chiama sys-libs/glibc - do emerge -1a sys-libs/gcc [ source ] (Nota: si può usare equery per confermare che è corretto; equery belongs belongs /usr/include/gnu/stubs-32.h)

On ArchLinux , il nome del pacchetto è lib32-glibc - do pacman -S lib32-glibc.


Stai usando Ubuntu 12.04 ? C'è n problema noto che pone i file in una posizione non standard . Dovrai anche fare:

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)

da qualche parte prima di costruire (diciamo nel tuo .bashrc).


Se stai compilando anche codice C++, avrai anche bisogno della libreria stdc ++ a 32 bit. Se vedi questo avviso:

..../usr/bin/ld: impossibile trovare -lstdc ++ ....

On Ubuntu dovrai fare Sudo apt-get install g++-multilib

On CentOS 5 dovrai fare yum install libstdc++-devel.i386

On CentOS 6 dovrai fare yum install libstdc++-devel.i686

Non esitate a modificare i pacchetti per altri sistemi.

325
Timothy Jones

Dal GNU UPC sito Web :

La compilazione del compilatore fallisce con un errore fatale: gnu/stubs-32.h: nessun file o directory di questo tipo

Questo messaggio di errore viene visualizzato nei sistemi a 64 bit in cui è abilitata la funzionalità multilib GCC/UPC e indica che la versione a 32 bit di libc non è installata. Esistono due modi per correggere questo problema:

  • Installa la versione a 32 bit di glibc (ad esempio glibc-devel.i686 su Fedora, CentOS, ..)
  • Disabilitare la build 'multilib' fornendo l'opzione "--disable-multilib" sul comando di configurazione del compilatore
54
ignis

Prova a fare un Sudo apt-get install libc6-dev.

apt-file mi dice che il file in questione appartiene a quel pacchetto.

9
Keith Layne

Questo è ora nelle FAQ del wiki di GCC, vedi http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h

7
Jonathan Wakely

Stavo ricevendo il seguente errore su un box Fedora 18:


1. /usr/include/gnu/stubs.h:7:27: errore fatale: gnu/stubs-32.h: nessuna compilazione di file o directory terminata.

Ho installato glibc.i686 e glibc-devel.i686, quindi la compilazione non è riuscita con il seguente errore:

2./usr/bin/ld: saltando incompatibile /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so durante la ricerca di -lgcc_s/usr/bin/ld: impossibile trovare -lgcc_s collect2: errore : ld ha restituito 1 stato di uscita

Soluzione:

Ho installato (yum install) glibc.i686 glibc-devel.i386 e libgcc.i686 per eliminare il problema della compilazione.

Ora la compilazione per 32 bit (-m32) funziona bene.

2
user2223366

Hmm beh, sono su Ubuntu 12.04 e ho ottenuto lo stesso errore quando provavo a compilare gcc 4.7.2

Ho provato ad installare il pacchetto libc6-dev-i386 e ho ottenuto quanto segue:

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

Ho anche impostato le variabili d'ambiente corrette in 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)

tuttavia, stavo ancora ricevendo l'errore, quindi ho semplicemente copiato stubs-32.h su dove gcc si aspettava di trovarlo dopo aver fatto una rapida diff:

[email protected]:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ./: stubs-32.h
Only in ../../gnu: stubs-64.h
[email protected]:/usr/include/i386-linux-gnu/gnu$ Sudo cp stubs-32.h ../../gnu/
[Sudo] password for vic: 
[email protected]:/usr/include/i386-linux-gnu/gnu$ diff ../../gnu ./
Only in ../../gnu: stubs-64.h
[email protected]:/usr/include/i386-linux-gnu/gnu$

Si sta compilando ora, vediamo se si lamenta di più ...

1
Victor Parmar

Se stai affrontando questo problema nel terminale Mac-OSX con python, prova ad aggiornare le versioni dei pacchetti che stai utilizzando. Quindi, vai ai tuoi file in python e dove hai specificato i pacchetti, aggiornali alle ultime versioni disponibili su Internet.

0
D.Bhatia

gnu/stubs-32.h non è diretto incluso nei programmi. È un file di intestazione di tipo back-end di gnu/stubs.h, proprio come gnu/stubs-64.h. È possibile installare il pacchetto multilib per aggiungerli entrambi.

0
user2775212

# Sudo apt-get install g ++ - multilib

Dovrebbe risolvere questo errore su macchine a 64 bit (Debian/Ubuntu).

0
skrishnakar

FWIW, ha l'odore di un errore (o almeno di una potenziale fonte di dolore futuro) per l'utilizzo di file da/usr/include durante la compilazione incrociata.

0
user47559