J'utilise gcc pour compiler une application C++ sur mon serveur CI ( http://ci.berboe.co.uk ) et en tant que vps sur lequel il est compilé a l'architecture x86-64 dont j'ai besoin faire une compilation croisée pour que le programme compilé fonctionne sur des ordinateurs x86.
J'ai installé gcc-multilib et g ++ - multilib ainsi que plusieurs autres paquetages suggérés ailleurs, mais j'ai toujours une erreur en essayant de compiler. Il est:
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.so when searching for -lstdc++
/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/libstdc++.a when searching for -lstdc++
/usr/bin/ld: cannot find -lstdc++
collect2: ld returned 1 exit status
Les journaux complets sont disponibles ici: http://ci.berboe.co.uk/job/MCServer%20Linux-x86/11/console
Toute aide pour résoudre ce problème serait très appréciée.
Modifier:
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crt1.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crti.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtbegin.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/crtend.o' is incompatible with i386 output
/usr/bin/ld: i386:x86-64 architecture of input file `/usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../../lib/crtn.o' is incompatible with i386 output
/usr/bin/ld: final link failed: Invalid operation
Je reçois cela après avoir résolu le problème précédent.
ia32-libs
dans certaines distributions, en passant à ceci: http://wiki.debian.org/Multiarch/HOWTO dans d'autres, plus d'informations à ce sujet si vous le demandez).LD_LIBRARY_PATH
env. variable. (très certainement export LD_LIBRARY_PATH = ${LD_LIBRARY_PATH}:/lib32:/usr/lib32:/usr/lib/i386-linux-gnu
et ainsi de suite).LD_INCLUDE_PATH
.N'hésitez pas à rechercher ces bibliothèques (une fois installées bien sûr), en utilisant:
find / -iname "*libstdc++.so*" 2> /dev/null
par exemple pour la bibliothèque libstdc++.so
. find
doit signaler un chemin que vous pourrez ajouter à votre variable d’environnement LD_LIBRARY_PATH
.
Vous feriez mieux de faire un chroot i386. mk-sbuild
(dans ubuntu-dev-tools) et schroot
facilitent leur gestion.
Il y a deux options qui pourraient fonctionner:
ia32-libs
en exécutant Sudo apt-get install ia32-libs
. C'est juste une intuition, cela pourrait ou non fonctionner.Ce lien pourrait aider: - http://en.sfml-dev.org/forums/index.php?topic=6034.