180 votes

Erreur "gnu/talons-32.h: Aucun fichier ou répertoire" lors de la compilation des Nachos code source

Je suis en train d'installer des Nachos sur mon portable et j'ai Ubuntu 11.04 sur l'ordinateur portable.

Le code est en C, et donc pour la construire, je suppose que j'ai besoin d'compilateur croisé. C'est là mon problème. J'ai téléchargé le code source de la MIPS cross compilateur à l'aide de la commande

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

et je l'ai décompressé à l'aide de

tar zxvf mips-decstation.linux-xgcc.gz      

C'est bien, mais quand j'essaie de compiler le code source de la nachos os, à l'aide de make, j'ai cette erreur

/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

Je suis en train de suivre les instructions données ici - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm et tout fonctionne bien sauf que quand j'ai essayer de faire.

379voto

Timothy Jones Points 10760

Vous allez rater les 32 bits de la libc dev paquet:

Sur Ubuntu il est appelé libc6-dev-i386 - avez - sudo apt-get install libc6-dev-i386. Voir ci-dessous pour les instructions supplémentaires pour Ubuntu 12.04.

Sur Red Hat distributions, le nom du package est glibc-devel.i686 (Merci à David Gardner commentaire)

Sur CentOS 5.8, le nom du package est glibc-devel.i386 (Grâce à JimKleck du commentaire)

Sur CentOS 6.3, le nom du package est glibc-devel.i686.

Sur SLES il est appelé glibc-devel-32bit - avez - zypper in glibc-devel-32bit


Êtes-vous à l'aide de Ubuntu 12.04? Il y a un problème connu qui met les fichiers dans un emplacement non standard. Vous aurez également besoin de faire:

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)

quelque part avant de créer (mot à dire dans votre .bashrc).


Si vous êtes aussi la compilation de code C++, vous aurez également besoin du 32 bits stdc++ de la bibliothèque. Si vous voyez cet avertissement:

.... /usr/bin/ld: ne peut trouver -lstdc++ ....

Sur Ubuntu , vous aurez besoin de faire sudo apt-get install g++-multilib

Sur CentOS 5 , vous aurez besoin de faire yum install libstdc++-devel.i386

Sur CentOS 6 , vous aurez besoin de faire yum install libstdc++-devel.i686

N'hésitez pas à modifier dans les paquets pour d'autres systèmes.

55voto

ignis Points 1685

À partir de la GNU UPC site web:

Compilateur build échoue avec l'erreur fatale: gnu/talons-32.h: Aucun fichier ou annuaire

Ce message d'erreur s'affiche sur le 64 bits des systèmes où GCC/UPC multilib fonctionnalité est activée, et il indique que la version 32 bits de libc n'est pas installé. Il ya deux façons de résoudre ce problème:

  • Installer la version 32 bits de la glibc (par exemple, glibc-devel.i686 sur Fedora, CentOS, ..)
  • Désactiver 'multilib" construire en fournissant des "--disable-multilib" interrupteur sur le compilateur de commande de configuration

9voto

Keith Layne Points 1686

Essayez de faire une sudo apt-get install libc6-dev.

apt-file me dit que le fichier en question appartient à cet ensemble.

7voto

Jonathan Wakely Points 45593

C'est maintenant dans le CCAG wiki FAQ, voir http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h

2voto

Victor Parmar Points 2473

Hmm eh bien, je suis sur ubuntu 12.04 et j'ai eu ce même message d'erreur lorsque vous essayez de compiler gcc 4.7.2

J'ai essayé d'installer l' libc6-dev-i386 paquet et le suivant:

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

J'ai également définir les variables d'environnement correctes dans 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)

cependant, j'étais encore en train de l'erreur alors que j'ai simplement copié stubs-32.h de plus à l'endroit où gcc m'attendais à le trouver après avoir fait un rapide diff:

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$

C'est la compilation de maintenant, nous allons voir si elle se plaint de plus ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X