一尘不染

链接到旧版本的libstdc ++

linux

安装新的构建机器后,我发现它带有标准C ++库的6.0.10

-rw-r--r--  1 root root 1019216 2009-01-02 12:15 libstdc++.so.6.0.10

但是,我们的许多目标计算机仍使用旧版本的libstdc ++,例如:

-rwxr-xr-x 1 root root  985888 Aug 19 21:14 libstdc++.so.6.0.8

显然,在最后两个0.0.1中,ABI发生了变化,因为尝试运行程序会导致

/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found

我尝试明确安装旧版本的gcc,但没有帮助。升级目标计算机是我无法控制的,因此不是一种选择。使我的构建在具有较旧libstdc
++的计算机上工作的最佳方法是什么?

我在apt-cache中搜索了要安装的旧libstdc ++版本,但显然没有6的旧版本可用吗?


阅读 269

收藏
2020-06-07

共1个答案

一尘不染

您不需要链接到其他库,您需要使用较旧版本的编译器。

看看GNU ABI政策。libstdc
++共享库旨在向前兼容。即如果需要6.0.8,则可以使用版本6.0.10。在该策略中,您可以从gcc-4.2.0开始阅读,需要6.0.9,因此您需要一个gcc-4.1.x。

简而言之,这就是为什么您的系统上只有一个libstdc ++。so.6.0.x的原因,您只需要最新的即可。

至于将构建系统设置为仅使用特定版本的编译器:确保不能使用标准g ++(重命名链接,删除提供它的软件包,将其从PATH中取出),然后开始进行挖掘。为我工作。

2020-06-07