Après des heures de recherche sur Google, je décide d'abandonner et de vous demander des experts. J'essaye de construire une application 32 bits (xgap si quelqu'un est intéressé) dans mon 64 Ubuntu 11.10. J'ai ajouté le CFLAGS = -m32 et le LDFLAGS = -L / usr / lib32 dans le makefile. Les objets sont intégrés en 32 bits fin. La dernière étape consiste à lier tous les objets et bibliothèques pour X windows dans cet exécutable --- xgap. D'une manière ou d'une autre, cela continue de me donner cette erreur:
gcc -o xgap xcmds.o utils.o gapgraph.o gaptext.o pty.o popdial.o xgap.o selfile.o -L/usr/lib32 -lXaw -lXmu -lXt -lXext -lX11 -lSM -lICE
/usr/bin/ld: skipping incompatible /usr/lib32/libXmu.so when searching for -lXmu
...
/usr/bin/ld: i386 architecture of input file `xcmds.o' is incompatible with i386:x86-64 output
...
J'ai installé ia32-libs et le support mutilib . Je pense que j'ai juste besoin de forcer l'éditeur de liens pour générer une sortie i386. J'ai essayé de mettre deux drapeaux LD dans ma commande gcc comme indiqué ci-dessus: -melf_i386 et -oformat elf32-i386 . Mais ce qui se passe, c'est que gcc ne recherche plus la bibliothèque 32 bits dans / usr / lib32 . Je me demande si je dois mettre ces drapeaux dans un ordre fixe?
Merci pour toute idée et aide!
EDIT: lorsque j'ajoute l'indicateur -m32 dans ma dernière commande gcc (l'étape de liaison je crois), même si j'ai l'indicateur -L / usr / lib32 en place, gcc ne recherche plus dans / usr / lib32 (vraiment bizarre ...) et génère l'erreur suivante:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.6.1/../../../libXaw.so when searching for -lXaw
/usr/bin/ld: skipping incompatible /usr/lib/libXaw.so when searching for -lXaw
/usr/bin/ld: cannot find -lXaw
collect2: ld returned 1 exit status
Quelqu'un a une idée pourquoi cela se produit? J'utilise l'outil automatique pour configurer et créer. Je suis vraiment bon pour modifier ces fichiers de script.
EIDT : J'ai résolu le problème. Je pense que gcc attendait une archive de bibliothèque statique. J'ai utilisé le script getlibs de http://ubuntuforums.org/showthread.php?t=474790 pour télécharger toutes les archives .a nécessaires pour la liaison. Ensuite, gcc a fonctionné. Je pense que gcc a fait une recherche dans le répertoire / usr / lib32 mais n'a pas trouvé les archives .a alors a continué à chercher dans le répertoire standard qui est / usr / lib , où il trouve les fichiers * .so incompatibles .
Mais alors la question est: les fichiers * .so dans / usr / lib32 / du paquet ia32-libs n'ont pas vraiment les bibliothèques nécessaires pour la liaison? À quoi servent ces fichiers dans / usr / lib32 / ?