Kir*_*rov 4 linker g++ libstdc++
一个简单的问题 - 有没有办法让g++链接器与特定的libstdc++库版本链接?我没有在gcc/ 的手册页中找到任何有用的东西g++,在这里也没有其他问题.
这是情况 - 我的应用程序使用一个特定的共享库,它是libstdc++.so.5用它构建的,我想安装并使用它RHEL5.所以,当我尝试在RHEL5机器上构建应用程序时,我收到了警告:
warning: libstdc++.so.5, needed by ..the_shared_library_.. may conflict with libstdc++.so.6
Run Code Online (Sandbox Code Playgroud)
安装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
Run Code Online (Sandbox Code Playgroud)
当我做的时候
[root@xxxx]# ldd my_exe
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00333000)
...
libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0x00ddf000)
Run Code Online (Sandbox Code Playgroud)
哪个不好,因为我知道这是未定义的行为:/
那么,有没有办法只使用构建我的可执行文件libstdc++.so.5?(libstdc++.so.6由于许多原因,删除不是一种选择.静态链接也不是一种选择).
非常感谢!
这是ABI版本表 ; -fabi-version交换机的默认值从1改为2,同时g ++引入了libstdc ++.so.6 with 3.4.这意味着要链接到您需要的旧libstdc ++库
-fabi-version=1否则你冒着ABI不兼容的风险.我无法准确地告诉你这些变化是什么,但总的来说,最好是尝试保留使用相同编译器版本编译的所有C++代码.
假设你不想尝试和其他东西这样做,我认为你有两个选择:
| 归档时间: |
|
| 查看次数: |
9955 次 |
| 最近记录: |