當在其他機器運行新編譯的程序時,若出現以下錯誤:
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) 說明已經在當前的目錄找到對應的動態庫文件