安装新的构建机器后,我发现它带有标准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的旧版本可用吗?
您不需要链接到其他库,您需要使用较旧版本的编译器。
看看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中取出),然后开始进行挖掘。为我工作。