libtool与libstdc ++的32位版本链接,所以在64位目标平台上安装了多个版本的gcc时

首先,我想让你知道这是我在StackOverflow上的第一篇文章,所以我希望我不会因为问一个非常愚蠢的问题而自欺欺人。 我一直在search这个问题几天了,到目前为止我还找不到任何答案。

情况如下:

我正在使用autotoolspipe理一个C ++项目。 目标平台是RHEL5 64bit,安装了两个版本的gcc

  • 安装在/ usr中的gcc 4.1.2
  • gcc 4.3.5安装在/local/opt/gcc-4.3.5

当我用默认的gcc版本(4.1.2)构build项目时,一切都很顺利,但是当我切换到gcc 4.3.5时,在链接时出现这个错误:

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

libtool似乎对32位版本的libstdc ++进行了硬编码,所以在命令行中,它应该是64位版本。 更确切地说,失败的libtool调用是:

 /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 

它被libtool翻译为:

 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 

我应该确定我用来从默认gcc切换到gcc 4.3.5的方法如下:

 $ 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 

我对所有这些工具都很陌生,所以我怀疑我做错了什么。 如果有人能够告诉我如何解决这个问题,我将非常感激。

干杯

我刚刚找到了自己的问题的答案:除了正确设置LD_LIBRARY_PATH,我需要将参数LDFLAGS=-L/local/opt/gcc-4.3.5/lib64传递给configure脚本。 谢谢大家的投入。