我在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?
答案 0 :(得分:2)
编译器生成GLIBCXX_3.4.21
之类的符号,用于标记编译所使用的C ++库版本(特别是从头文件和模板函数调用的非内联函数)。这是libstdc ++库,而不是glibc。
您正在寻找的版本是您的libstdc ++ - 这是C ++的一个有趣问题,模板库往往会不断变化,因此函数可能被声明为unsigned int func()
,并且后来有人决定将其更改为size_t func()
。在32位计算机上没有区别,但对于64位计算机而言,它确实有所作为,并且使用了#34;错误的"版本将导致返回值大小的问题。
有一些不同的解决方案(这不是一个完整的清单):