linux多个gcc版本,linux – libtool与64位目标平台上的32位版本的libstdc .so连接,当安装了多个版本的gcc...

在RHEL564位系统中,用户遇到使用GCC4.3.5进行编译时遇到链接错误,错误显示为libstdc++.so文件格式错误。问题源于libtool在命令行中指定了32位版本的libstdc.so路径,而系统需要64位版本。用户尝试通过设置环境变量切换GCC版本,但问题依旧存在。用户寻求解决方案以解决libtool与64位库的兼容性问题。
摘要由CSDN通过智能技术生成

首先,我想让你知道这是我在StackOverflow上的第一篇文章,所以我希望通过提出一个非常愚蠢的问题,我不会愚弄自己.我已经在这个问题上搜索了几天了,到目前为止我找不到任何答案.

这是情况:

我正在使用自动工具管理的C项目.目标平台是RHEL5 64位,安装了两个版本的gcc:

> gcc 4.1.2安装在/ usr中

> gcc 4.3.5安装在/local/opt/gcc-4.3.5中

当我使用默认的gcc版本(4.1.2)构建我的项目时,一切顺利,但是当我切换到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 .so的路径,而它应该是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,/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

我对所有这些工具来说都很新,所以我怀疑我在做错事.如果有人可以给我一个关于如何解决这个问题的线索,我将非常感激.

干杯

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值