安装新的构建机器后,我发现它带有6.0.10的标准C++库
-rw-r--r-- 1 root root 1019216 2009-01-02 12:15 libstdc++.so.6.0.10
Run Code Online (Sandbox Code Playgroud)
但是,我们的许多目标机器仍然使用旧版本的libstdc ++,例如:
-rwxr-xr-x 1 root root 985888 Aug 19 21:14 libstdc++.so.6.0.8
Run Code Online (Sandbox Code Playgroud)
显然ABI在最后两个0.0.1中发生了变化,因为尝试运行程序会导致结果
/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found
Run Code Online (Sandbox Code Playgroud)
我尝试显式安装旧版本的gcc,但没有帮助.升级目标计算机是我无法控制的,所以不能选择.使用较旧的libstdc ++的机器上运行构建的最佳方法是什么?
我在apt-cache中搜索了要安装的较旧的libstdc ++版本,但显然没有旧版本的6可用?
Jan*_*Jan 20
您不需要链接到不同的库,您需要使用旧版本的编译器.
看看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中取出),然后开始挖掘.为我工作.
您可以使用自己的代码(例如,在子目录中)发送所需的共享库,并将LD_LIBRARY_PATH设置为运行应用程序的前身,以便首先在该目录中进行搜索.
运送您需要的特定版本意味着用户安装的版本无关紧要.您只需确保同时发送所有依赖项.
| 归档时间: |
|
| 查看次数: |
21726 次 |
| 最近记录: |