web-dev-qa-db-fra.com

Erreur "gnu / stubs-32.h: Aucun fichier ou répertoire de ce type" lors de la compilation du code source de Nachos

J'essaie d'installer des nachos sur mon ordinateur portable et Ubuntu 11.04 est installé sur l'ordinateur portable.

Le code est en C et donc pour le construire, je suppose qu'il me faudra un compilateur croisé. C'est où mon problème est. J'ai téléchargé le code source du compilateur croisé MIPS à 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é en utilisant

tar zxvf mips-decstation.linux-xgcc.gz      

C'est bon, mais quand j'essaie de construire le code source de l'OS nachos, en utilisant make, j'obtiens 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

J'essaie de suivre les instructions données ici - http://mll.csie.ntu.edu.tw/course/os_f08/217.htm et tout fonctionne correctement sauf lorsque j'essaie d'utiliser faire.

161
Ashish Agarwal

Vous manquez le paquet dev libc 32 bits:

Sur Ubuntu , il s’appelle libc6-dev-i386 - do Sudo apt-get install libc6-dev-i386. Voir ci-dessous des instructions supplémentaires pour Ubuntu 12.04.

Sur Red Hat , le nom du paquet est glibc-devel.i686 (Merci au commentaire de David Gardner).

Sur CentOS 5.8 , le nom du paquet est glibc-devel.i386 (grâce au commentaire de JimKleck).

Sur CentOS 6/7 , le nom du paquet est glibc-devel.i686.

Le SLES s'appelle glibc-devel-32bit - do zypper in glibc-devel-32bit.

Sur Gentoo on l’appelle sys-libs/glibc - do emerge -1a sys-libs/gcc [ source ] (Note: on peut utiliser equery pour confirmer que cela est correct; faites equery belongs belongs /usr/include/gnu/stubs-32.h)

Sur ArchLinux , le nom du paquet est lib32-glibc - do pacman -S lib32-glibc.


Utilisez-vous Ubuntu 12.04 ? Il y a n problème connu qui place les fichiers dans un emplacement non standard . Vous aurez aussi 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 construire (par exemple, dans votre .bashrc).


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

..../usr/bin/ld: impossible de trouver -lstdc ++ ....

Sur Ubuntu , vous devrez faire Sudo apt-get install g++-multilib

Sur CentOS 5 , vous devrez faire yum install libstdc++-devel.i386

Sur CentOS 6 , vous devrez faire yum install libstdc++-devel.i686

S'il vous plaît, n'hésitez pas à éditer les packages pour d'autres systèmes.

330
Timothy Jones

Depuis le site web GNU UPC :

La compilation du compilateur échoue avec l'erreur fatale: gnu/stubs-32.h: Aucun fichier ou répertoire de ce type

Ce message d'erreur apparaît sur les systèmes 64 bits où la fonctionnalité GCC/UPC multilib est activée et indique que la version 32 bits de libc n'est pas installée. Il y a deux façons de corriger ce problème:

  • Installez la version 32 bits de glibc (par exemple, glibc-devel.i686 sur Fedora, CentOS, ..)
  • Désactivez la construction 'multilib' en fournissant le commutateur "--disable-multilib" à la commande de configuration du compilateur
54
ignis

Essayez de faire un Sudo apt-get install libc6-dev.

apt-file me dit que le fichier en question appartient à ce paquet.

9
Keith Layne

Ceci est maintenant dans la FAQ du wiki GCC, voir http://gcc.gnu.org/wiki/FAQ#gnu_stubs-32.h

7
Jonathan Wakely

Je recevais l'erreur suivante sur une boîte Fedora 18:


1. /usr/include/gnu/stubs.h:7:27: erreur fatale: gnu/stubs-32.h: aucune compilation de fichiers ou de répertoires de ce type n'est terminée.

J'ai installé glibc.i686 et glibc-devel.i686, puis la compilation a échoué avec l'erreur suivante:

2./usr/bin/ld: ignorer incompatible /usr/lib/gcc/x86_64-redhat-linux/4.7.2/libgcc_s.so lors de la recherche de -lgcc_s/usr/bin/ld: impossible de trouver -lgcc_s collect2: error : ld a renvoyé 1 état de sortie

Solution:

J'ai installé (yum install) glibc.i686, glibc-devel.i386 et libgcc.i686 pour résoudre le problème de la compilation.

Maintenant, la compilation pour 32 bits (-m32) fonctionne bien.

2
user2223366

Hmm, je suis sur Ubuntu 12.04 et j'ai la même erreur en essayant de compiler gcc 4.7.2

J'ai essayé d'installer le paquetage libc6-dev-i386 et j'ai obtenu ce qui suit:

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 aussi défini les bonnes variables d'environnement 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, je continuais à avoir l'erreur alors j'ai simplement copié stubs-32.h vers l'endroit où gcc s'attendait à la trouver après avoir effectué 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 maintenant, voyons si ça se plaint plus ...

1
Victor Parmar

Si vous rencontrez ce problème dans un terminal Mac-OSX avec Python, essayez de mettre à jour les versions des packages que vous utilisez. Accédez donc à vos fichiers dans python et aux emplacements spécifiés, mettez-les à jour avec les dernières versions disponibles sur Internet.

0
D.Bhatia

gnu/stubs-32.h n'est pas dirigé inclus dans les programmes. C'est un fichier d'en-tête de type back-end de gnu/stubs.h, tout comme gnu/stubs-64.h. Vous pouvez installer le package multilib pour ajouter les deux.

0
user2775212

# Sudo apt-get install g ++ - multilib

Devrait corriger cette erreur sur les machines 64 bits (Debian/Ubuntu).

0
skrishnakar

FWIW, utiliser des fichiers de/usr/include lors de la compilation croisée a le sens d’une erreur (ou au moins d’une source potentielle de problèmes futurs).

0
user47559