我已经在Ubuntu机器上创建了C++应用程序。我已经将二进制文件复制到Centos机器上。出现错误:
/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
我决定在ldd --version命令的帮助下检查我的机器中有哪些glibc版本:
Ubuntu: 2.23 Centos6.9: 2.12
为什么CentOS对GLIBCXX_3.4.21有异议,而Ubuntu拥有glibc版本2.23?
jckbn6z71#
GLIBCXX_3.4.21这样的符号是由编译器生成的,用来标记编译所使用的C库的版本(特别是从头文件和模板函数中调用的非内联函数)。这是libstdc库,而不是glibc。你要找的版本是你的libstdc++ -这是C的一个有趣的问题,模板库经常会改变,所以一个函数可能被声明为unsigned int func(),后来有人决定把它改为size_t func()。在32位机器上没有区别,但在64位机器上它确实有区别,并且使用“错误”的版本将导致返回值大小的问题。有几种不同的解决方案(这不是一个完整的列表):1.请确保在两台计算机上使用相同版本的libstdc。1.在目标计算机上编译代码。1.使用静态libstdc++
GLIBCXX_3.4.21
unsigned int func()
size_t func()
mqxuamgl2#
这是一个伟大的-我用-static选项在链接和它解决的问题也。
2条答案
按热度按时间jckbn6z71#
GLIBCXX_3.4.21
这样的符号是由编译器生成的,用来标记编译所使用的C库的版本(特别是从头文件和模板函数中调用的非内联函数)。这是libstdc库,而不是glibc。你要找的版本是你的libstdc++ -这是C的一个有趣的问题,模板库经常会改变,所以一个函数可能被声明为
unsigned int func()
,后来有人决定把它改为size_t func()
。在32位机器上没有区别,但在64位机器上它确实有区别,并且使用“错误”的版本将导致返回值大小的问题。有几种不同的解决方案(这不是一个完整的列表):
1.请确保在两台计算机上使用相同版本的libstdc。
1.在目标计算机上编译代码。
1.使用静态libstdc++
mqxuamgl2#
这是一个伟大的-我用-static选项在链接和它解决的问题也。