如何手动设置使用哪个版本'libstdc++.so.6'而不是使用最新版本?

Posted

技术标签:

【中文标题】如何手动设置使用哪个版本\'libstdc++.so.6\'而不是使用最新版本?【英文标题】:How to manually set which version 'libstdc++.so.6' used instead of using the latest one?如何手动设置使用哪个版本'libstdc++.so.6'而不是使用最新版本? 【发布时间】:2018-04-20 08:48:21 【问题描述】:

我的服务器出现错误。

未找到版本“GLIBCXX_3.4.21”

经过一番调查,我发现在本地计算机上构建应用程序时使用的“libstdc++.so.6”版本比在服务器上先进得多。所以我收到了这个错误,因为该版本在服务器上不可用。根据我的阅读,我可以通过将服务器上的“libstdc++.so.6”升级到最新版本来解决这个问题,但我不能这样做,因为访问受限。 有什么办法可以降级或让我的本地使用旧版本作为默认版本?

【问题讨论】:

搜索LD_LIBRARY_PATH等信息 @underscore_d 感谢您的建议,但路径是正确的。 LD_LIBRARY_PATH considered harmful,还有更好的办法。 @d_w 我的意思不是检查你常用的系统库是否已经在那里指定,而是你需要在那里(或更好的地方)添加一些东西,以使其默认更喜欢你的降级版本。 @MaximEgorushkin 谢谢!这对我也可能有用。 【参考方案1】:

在链接您的应用程序时指定-Wl,-rpath=$ORIGIN 以使其在可执行文件所在的文件夹中搜索共享库。然后将libstdc++.so.6 和其他应用程序依赖项(使用ldd 找到它们)复制到您的应用程序文件夹并分发该文件夹。见man ld.so,关于$ORIGIN的部分。

【讨论】:

以上是关于如何手动设置使用哪个版本'libstdc++.so.6'而不是使用最新版本?的主要内容,如果未能解决你的问题,请参考以下文章

如何更改 libstdc++.so.6 的版本?

libstdc++.so.6:未找到版本 GLIBCXX_3.4.20

为编译器设置 libstdc++.so.6 位置

MATLAB 代码生成:/lib64/libstdc++.so.6:版本:未找到“GLIBCXX_3.4_20”

ld.so.1:协议:致命:libstdc++.so.6:在 Solaris 11 中找不到版本“GLIBCXX_3.4.20”

C - 如何使用特定版本的symbol