web-dev-qa-db-fra.com

Problèmes de compilation croisée avec GCC / G ++

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.

6
hifkanotiks
  • Installez des bibliothèques 32 bits (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).
  • Assurez-vous d’ajouter le chemin de la bibliothèque i386 à votre 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).
  • Assurez-vous d’ajouter le chemin d’inclusion i386 à votre variable d’environnement 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.

3
user129005

Vous feriez mieux de faire un chroot i386. mk-sbuild (dans ubuntu-dev-tools) et schroot facilitent leur gestion.

1
Colin Watson

Il y a deux options qui pourraient fonctionner:

  1. Installez le paquet ia32-libs en exécutant Sudo apt-get install ia32-libs. C'est juste une intuition, cela pourrait ou non fonctionner.
  2. Une autre solution peut être d'installer un Linux 32 bits sur une machine virtuelle pour compiler le code.

Ce lien pourrait aider: - http://en.sfml-dev.org/forums/index.php?topic=6034.

1
green