liens libtool avec la version 32 bits de libstdc ++. so sur une plate-forme cible 64 bits lorsque plusieurs versions de gcc sont installées

Tout d’abord, je voudrais vous faire savoir que c’est mon premier article sur StackOverflow, alors j’espère que je ne me ridiculiserai pas en posant une question très stupide. Je suis en train de goûter à ce problème depuis quelques jours maintenant et je n’ai pas trouvé de réponse à ce jour.

Voici la situation:

Je travaille sur un projet C ++ géré avec des autotools. La plate-forme cible est RHEL5 64bit avec deux versions de gcc installées:

  • gcc 4.1.2 installé dans / usr
  • gcc 4.3.5 installé dans /local/opt/gcc-4.3.5

Lorsque je construis mon projet avec la version par défaut de gcc (4.1.2), tout se passe bien, mais lorsque je passe à gcc 4.3.5, je reçois cette erreur au moment du lien:

/local/opt/gcc-4.3.5/lib/../lib/libstdc++.so: could not read symbols: File in wrong format collect2: ld returned 1 exit status 

Il semble que libtool ait codé en dur le chemin d’access à la version 32 bits de libstdc ++. So dans la ligne de commande, alors que cela aurait dû être la version 64 bits. Plus précisément, l’appel libtool qui échoue est:

 /bin/sh ./libtool --tag=CXX --mode=link g++ -m64 -o libfoo.la -rpath /local/opt/foo/lib src/foo/libfoo_la-bar1.lo src/foo/libfoo_la-bar2.lo 

Il est traduit par libtool comme:

 g++ -shared -nostdlib /usr/lib/../lib64/crti.o /local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/crtbeginS.o src/foo/.libs/libfoo_la-bar1.o src/foo/.libs/libfoo_la-bar2.o -Wl,--rpath -Wl,/local/opt/gcc-4.3.5/lib/../lib -Wl,--rpath -Wl,/local/opt/gcc-4.3.5/lib/../lib -L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5 -L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/../../../../lib64 -L/lib/../lib64 -L/usr/lib/../lib64 -L/local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/../../.. /local/opt/gcc-4.3.5/lib/../lib/libstdc++.so -lm -lc -lgcc_s /local/opt/gcc-4.3.5/lib/gcc/x86_64-unknown-linux-gnu/4.3.5/crtendS.o /usr/lib/../lib64/crtn.o -m64 -Wl,-soname -Wl,libfoo.so.0 -o .libs/libfoo.so.0.0.0 

Je devrais préciser que la méthode que j’utilise pour passer de gcc par défaut à gcc 4.3.5 est la suivante:

 $ export PATH=/local/opt/gcc-4.3.5/bin:$PATH $ export LD_LIBRARY_PATH=/local/opt/gcc-4.3.5/lib:/local/opt/gcc-4.3.5/lib64:$LD_LIBRARY_PATH $ export GCC_HOME=/local/opt/gcc-4.3.5 

Je suis tout à fait nouveau avec tous ces outils, donc je soupçonne que je fais quelque chose de mal. Je serais très reconnaissant si quelqu’un pouvait me donner un indice sur la façon de résoudre ce problème.

À votre santé

Je viens de trouver la réponse à ma propre question: en plus de définir correctement LD_LIBRARY_PATH, je devais transmettre l’argument LDFLAGS=-L/local/opt/gcc-4.3.5/lib64 au script de configure . Merci à tous pour vos commentaires.