gpt4 book ai didi

c++ - libstdc++ GLIBCXX 版本错误

转载 作者:可可西里 更新时间:2023-11-01 18:17:57 26 4
gpt4 key购买 nike

当我在我的计算机上使用 g++ 编译一个 c++ 程序并将可执行文件传输到我的大学服务器上运行它时,我得到了

./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.9' not found (required by ./main)
./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by ./main)
./main: /usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.11' not found (required by ./main)

程序在我的电脑上运行良好,我没有权限在我的大学服务器上安装任何新软件。

有什么帮助吗?谢谢

最佳答案

在家中链接您的程序时,您似乎正在使用标准库作为共享库(默认行为)。

因此,您的链接器并不是真正“链接”库,而是解析一些符号并执行其他操作,同时将库的实际加载延迟到运行时。

当你在你的大学计算机上执行你的程序时,加载程序(实际上将你的程序加载到内存中并抛出主线程的程序)查找你的程序需要的库并尝试加载它们(查找 LD_LIBRARY_PATH 在 linux 中,如果你感到好奇的话)。

这里的问题是您在家中将您的程序与一个版本的 stdlib 链接,该版本与您在大学拥有的版本不同。因此,当加载程序尝试查找库时,它会失败,因此您的程序无法运行。

解决方案:

a) 为了避免所有这些问题,使用静态链接而不是动态链接。我不确定 stdlib 是否可行,但我认为值得对其进行测试(请参阅:http://gcc.gnu.org/onlinedocs/gcc/Link-Options.html 并寻找“-static”标志)

b) 你可以尝试在你大学的计算机上编译你的程序,这样它就会使用那里的版本。

c) 试着知道那里安装了哪个 stdlib 版本,并在你的编译器机器上安装相同的版本。

d) 您可以尝试将您的家庭版本的 stdlib 复制到您的应用程序所在的同一文件夹中。这通常有效,因为加载程序倾向于在查看环境变量 LD_LIBRARY_PATH (linux)

中设置的路径之前在当前应用程序文件夹中搜索共享库

希望对您有所帮助。

附言:在这里,您很好地介绍了静态库与共享/动态库 http://www.network-theory.co.uk/docs/gccintro/gccintro_25.html

这里 ( http://en.wikipedia.org/wiki/Library_%28computing%29 ) 不是很好但更完整的库描述。

关于c++ - libstdc++ GLIBCXX 版本错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7150409/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com