Linker 如何与特定库(g+;+;&libstdc+;&x2B;.so.5和libstdc+;&x2B;.so.6)链接
一个简单的问题-有没有办法让Linker 如何与特定库(g+;+;&libstdc+;&x2B;.so.5和libstdc+;&x2B;.so.6)链接,linker,g++,libstdc++,Linker,G++,Libstdc++,一个简单的问题-有没有办法让g++链接器链接到特定的libstdc++库版本?在gcc/g++的手册页中,我没有发现任何有用的东西,在这里的其他问题中也没有 情况是这样的-我的应用程序使用一个特定的共享库,它是用libstdc++.so.5构建的,我想在RHEL5上安装并使用它。因此,当我尝试在RHEL5机器上构建应用程序时,我得到了警告: warning: libstdc++.so.5, needed by ..the_shared_library_.. may conflict with l
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
不是一个选项。静态链接也不是一个选项)
非常感谢 这是答案;-fabi version
开关的默认值从1更改为2,同时g++引入了libstdc++.so.6和3.4。这意味着要链接到旧的libstdc++库,您需要
-
<>查找和使用等效的C++头,而不是使用编译器所包含的那些头文件
好吧,我试过第一种选择,但还是没有。。我还在那里等待帮助,所以我不认为他们会重新编译这个库。关于第二个——我需要在RHEL5机器上使用该应用程序,所以我不需要旧的OS库,只需要libstdc++。如果他们告诉我他们用于编译oracle库(OCCI 10.2.0.3)的gcc版本,我将使用RHEL5和特定的gcc版本创建一个虚拟机。希望这会有所帮助:/感谢您的回复!BR,kirill很抱歉,这没用:-/必要时,您可以为libstdc++.so.5代码运行一个单独的进程,并使用IPC在两者之间传递数据。甚至可以用旧的GCC编写C包装库,并将其链接到新代码中,所以在这两个之间没有C++边界,但是您必须非常小心地注意那里的链接链接。不幸的是,我没有时间为这个问题实现它,但这对其他应用程序确实有帮助。非常有趣的想法。谢谢你好!我只是想告诉你这个问题已经解决了,是的,Rup,你是对的。解决这个问题的方法是使用gcc 3.4.3,而不是3.2.3(:感谢您的帮助!祝您好运,Kiril Kirov