当在其他机器运行新编译的程序时,若出现以下错误:
libstdc++.so.6: version `GLIBCXX_3.4.22' not found
解决方法一:
进入目录/usr/lib/x86_64-linux-gnu/
执行
cd /usr/lib/x86_64-linux-gnu/
strings ./libstdc++.so.6 | grep GLIBC 弹出以下信息 GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 说明库内没有3.4.22的运行时 使用 locate libstdc++.so 查找大于libstdc++.so.6.0.25的库文件 将此文件复制到 sudo cp /your_path/libstdc++.so.6.0.25 ./ 查看当前libstdc++.so.6的软链接 ls -l libstdc++.so.6 lrwxrwxrwx 1 root root 19 3月 10 20:29 ./libstdc++.so.6 -> libstdc++.so.6.0.19 备份源文件 mv ./libstdc++.so.6 ./libstdc++.so.6_bak 建立软连接 sudo ln -s libstdc++.so.6.0.25 libstdc++.so.6 查看软链接libstdc++.so.6 ls -l libstdc++.so.6 lrwxrwxrwx 1 root root 19 3月 10 20:29 ./libstdc++.so.6 -> libstdc++.so.6.0.25 再次检查运行时 strings ./libstdc++.so.6 | grep GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_3.4.20 GLIBCXX_3.4.21 GLIBCXX_3.4.22 GLIBCXX_3.4.23 GLIBCXX_3.4.24 GLIBCXX_3.4.25 GLIBC_2.2.5 GLIBC_2.3 GLIBC_2.14 GLIBC_2.4 GLIBC_2.18 GLIBC_2.16 GLIBC_2.3.4 GLIBC_2.17 GLIBC_2.3.2 GLIBCXX_DEBUG_MESSAGE_LENGTH
解决方法二:
sudo apt-get install libstdc++6
解决方法三:
-Wl,-rpath=. 编译选项中添加如上,表示优先在本级目录中搜索相应的动态库进行加载,并且将libstdc++.so.6拷贝到可执行程序同一级目录 通过ldd 查看可执行程序引用的动态库存放地址 ldd mytest libstdc++.so.6 => ./libstdc++.so.6 (0x0000ffff91f50000) 说明已经在当前的目录找到对应的动态库文件