【发布时间】:2010-08-31 10:09:23
【问题描述】:
一个简单的问题 - 有没有办法让 g++ 链接器链接到特定的 libstdc++ 库版本?我在gcc/g++ 的手册页中没有找到任何有用的东西,这里的其他问题也没有。
情况是这样——我的应用程序使用了一个特定的共享库,它是用libstdc++.so.5 构建的,我想在RHEL5 上安装和使用它。因此,当我尝试在 RHEL5 机器上构建应用程序时,我收到了警告:
warning: libstdc++.so.5, needed by ..the_shared_library_.. may conflict with libstdc++.so.6
安装compat-libstdc++ rpm 没有帮助,程序在std::string 的析构函数上崩溃,因为无能力。所以,在这台 RHEL5 机器上我有这个:
[root@xxx]# ll /usr/lib/libstd*
-rwxr-xr-x 1 root root 259532 Aug 21 2006 /usr/lib/libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 31 Jul 28 19:35 /usr/lib/libstdc++-libc6.2-2.so.3 -> libstdc++-3-libc6.2-2-2.10.0.so
lrwxrwxrwx 1 root root 18 Aug 24 15:08 /usr/lib/libstdc++.so.5 -> libstdc++.so.5.0.7
-rwxr-xr-x 1 root root 733456 Aug 21 2006 /usr/lib/libstdc++.so.5.0.7
当我制作时
[root@xxxx]# ldd my_exe
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00333000)
...
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00ddf000)
这很糟糕,因为我知道这是未定义的行为:/
那么,有没有办法只使用 libstdc++.so.5 来构建我的可执行文件? (由于很多原因,删除libstdc++.so.6 不是一种选择。静态链接也不是一种选择)。
非常感谢!
【问题讨论】: