Linux解决libstdc++的版本问题

version `CXXABI_1.3.8′ not found

version `GLIBCXX_3.4.21′ not found

两者是一个问题导致的:

c++标准库太老了.没有更新.

查看当前 GCC 的版本

  1. # strings /usr/lib64/libstdc++.so.6 | grep GLIBC
  2. GLIBCXX_3.4
  3. GLIBCXX_3.4.1
  4. GLIBCXX_3.4.2
  5. GLIBCXX_3.4.3
  6. GLIBCXX_3.4.4
  7. GLIBCXX_3.4.5
  8. GLIBCXX_3.4.6
  9. GLIBCXX_3.4.7
  10. GLIBCXX_3.4.8
  11. GLIBCXX_3.4.9
  12. GLIBCXX_3.4.10
  13. GLIBCXX_3.4.11
  14. GLIBCXX_3.4.12
  15. GLIBCXX_3.4.13
  16. GLIBCXX_3.4.14
  17. GLIBCXX_3.4.15
  18. GLIBCXX_3.4.16
  19. GLIBCXX_3.4.17
  20. GLIBCXX_3.4.18
  21. GLIBCXX_3.4.19
  22. GLIBC_2.3
  23. GLIBC_2.2.5
  24. GLIBC_2.14
  25. GLIBC_2.17
  26. GLIBC_2.3.2

查找 libstdc++.so.6.0.21 库文件

  1. # 查找库文件
  2. # find / -name libstdc++.so.6.0.21
  3. # 如果libstdc++.so.6.0.21库文件已存在,则按照下面的步骤创建软链接即可
  4. # 如果libstdc++.so.6.0.21库文件不存在,则需要按照下面的步骤编译新版本的GCC,然后再创建软链接

编译新版本的 GCC

GCC 各版本的下载地址,其中 gcc-5.2.0 对应 GLIBCXX_3.4.21 与 libstdc++.so.6.0.21,而 gcc-6.5.0 对应 GLIBCXX_3.4.22 与 libstdc++.so.6.0.22,具体下载的 GCC 版本根据自己的需要进行选择。

  1. # 下载文件(117M)
  2. # wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-5.2.0/gcc-5.2.0.tar.bz2
  3. # 解压文件
  4. # tar -xvf gcc-5.2.0.tar.bz2
  5. # 进入解压目录
  6. # cd gcc-5.2.0
  7. # 下载编译gcc所需的依赖文件和库
  8. # ./contrib/download_prerequisites
  9. # 建立输出目录,用于存放编译时所有产生的中间文件
  10. # mkdir gcc-temp
  11. # 进入输出目录
  12. # cd gcc-temp
  13. # 执行configure配置
  14. # ../configure –enable-checking=release –enable-languages=c,c++ –disable-multilib
  15. # 编译gcc,指定编译使用的线程数为8,编译耗时较长,可能需要几个小时
  16. # make -j8
  17. # 这里为了避免影响系统的稳定性,暂时不执行“make install”和替换系统默认版本的gcc

建立软链接

  1. # 进入输出目录
  2. # cd gcc-temp
  3. # 查找编译生成libstdc++.so库文件,下面查找到的libstdc++.so、libstdc++.so.6都只是软链接文件,libstdc++.so.6.0.21才是真正编译生成的库文件
  4. # find . -name “libstdc++.so*”
  5. ./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
  6. ./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
  7. ./prev-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
  8. ./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
  9. ./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
  10. ./stage1-x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
  11. ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so
  12. ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6
  13. ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21
  14. # 拷贝libstdc++.so.6.0.21库文件到lib64目录
  15. # cp ./x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs/libstdc++.so.6.0.21 /usr/lib64
  16. # 进入lib64目录
  17. # cd /usr/lib64
  18. # 删除旧的链接文件
  19. # rm -f libstdc++.so.6
  20. # 创建新的链接文件
  21. # ln -s libstdc++.so.6.0.21 libstdc++.so.6

验证新的 libstdc++.so.6.0.21 库文件是否生效

如果下面的输出结果中,出现 GLIBCXX_3.4.21,则代表新的 libstdc++.so.6.0.21 库文件生效。

  1. # strings /usr/lib64/libstdc++.so.6 | grep GLIBC
  2. GLIBCXX_3.4
  3. GLIBCXX_3.4.1
  4. GLIBCXX_3.4.2
  5. GLIBCXX_3.4.3
  6. GLIBCXX_3.4.4
  7. GLIBCXX_3.4.5
  8. GLIBCXX_3.4.6
  9. GLIBCXX_3.4.7
  10. GLIBCXX_3.4.8
  11. GLIBCXX_3.4.9
  12. GLIBCXX_3.4.10
  13. GLIBCXX_3.4.11
  14. GLIBCXX_3.4.12
  15. GLIBCXX_3.4.13
  16. GLIBCXX_3.4.14
  17. GLIBCXX_3.4.15
  18. GLIBCXX_3.4.16
  19. GLIBCXX_3.4.17
  20. GLIBCXX_3.4.18
  21. GLIBCXX_3.4.19
  22. GLIBCXX_3.4.20
  23. GLIBCXX_3.4.21
  24. GLIBC_2.3
  25. GLIBC_2.2.5
  26. GLIBC_2.14
  27. GLIBC_2.17
  28. GLIBC_2.3.2
  29. GLIBCXX_DEBUG_MESSAGE_LENGTH

还有一个笨办法就是找个现成的libstdc++.so.6.0.21

 

把它拷到/usr/lib64下

删掉libstdc++.so.6这个软连接. rm -rf libstdc++.so.6

建立新连接ln -s libstdc++.so.6.0.21 libstdc++.so.6

千万别忘了ldconfig

最后看一眼:strings /usr/lib64/libstdc++.so.6 | grep GLIBC

大功告成!完事!

1.本文部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
2.若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
3.如果本站有侵犯、不妥之处的资源,请在网站最下方联系我们。将会第一时间解决!
4.本站所有内容均由互联网收集整理、网友上传,仅供大家参考、学习,不存在任何商业目的与商业用途。
5.本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
孤单博客 » Linux解决libstdc++的版本问题
  • 22会员总数(位)
  • 286资源总数(个)
  • 1本周发布(个)
  • 0 今日发布(个)
  • 239稳定运行(天)

提供最优质的资源集合

加入海王 加入Q群
开通海王 享更多特权,建议使用 QQ 登录