一个简单的问题 - 有没有办法让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
不是一种选择。静态链接也不是一种选择。)
非常感谢!
答案 0 :(得分:5)
这是ABI versions table; -fabi-version
开关的默认值从1变为2,同时g ++引入了libstdc ++。so.6 with 3.4。这意味着要链接旧的libstdc ++库,您需要
-fabi-version=1
否则您将面临ABI不兼容的风险。我无法准确地告诉你这些变化是什么,但总的来说,最好是尝试保留使用相同编译器版本编译的所有C ++代码。
假设你不想试图破解这样的东西我认为你有两个选择: