当在目标机器上出现类似 “/lib64/libstdc++.so.6: version GLIBCXX_x.x.xx’ not found (required by ./appname)” 或 “/lib64/libstdc++.so.6: version GLIBCXX_3.4.21’ not found (required by ./NetForward)” 这样的 GLIBCXX 版本不匹配错误时,可以通过重新编译代码,使用与目标机器的 GLIBCXX 版本相对应的 GCC 版本来解决。以下是解决该问题的一般步骤。
/lib64/libstdc++.so.6: version `GLIBCXX_x.x.xx’ not found (required by ./appname)
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21’ not found (required by ./NetForward)
有时候你无法控制目标机器(例如,你的库需要在受限的企业系统上运行)。在这种情况下,你需要重新编译你的代码,使用与目标机器的GLIBCXX版本相对应的GCC版本。你可以按照以下步骤进行操作:
- 查找目标机器支持的最新版本GLIBCXX:使用命令
strings /usr/lib/libstdc++.so.6 | grep GLIBC
。假设版本是3.4.21。 - 使用 https://gcc.gnu.org/onlinedocs/libstdc++/manual/abi.html 查找对应的GCC版本。在我们的例子中,对应的GCC版本是 [5.1.0)。
- 从 https://ftp.gnu.org/gnu/gcc/ 下载对应的 GCC 源代码
cd /opt
wget https://ftp.gnu.o