如何手动设置使用哪个版本'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:未找到版本 GLIBCXX_3.4.20
MATLAB 代码生成:/lib64/libstdc++.so.6:版本:未找到“GLIBCXX_3.4_20”
ld.so.1:协议:致命:libstdc++.so.6:在 Solaris 11 中找不到版本“GLIBCXX_3.4.20”