编译报错:symbol lookup error: /usr/lib64/libstdc++.so.6: undefined symbol: _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE, version GLIBCXX_3.4 问题解决
1.思路总结,出现该问题是由于系统中GLBCX 3.4 对应的libstdc++.so.6的库文件版本不匹配。
解决步骤:
1:查询系统中已安装的GLIBCXX 版本
#strings /usr/lib/libstdc++.so.6 | grep GLIBCXX
2、如上图,GLIBCXX_3.4 在系统中已安装,libstdc++.so.6: undefined symbol (符号未定义,很有可能是由于libstdc++.so.6这个文件的原因)
3.切换到/usr/lib目录下,查看libstdc++.so.6 对应的什么文件
cd /usr/lib
别问我,为什么会有这么多版本的,费了好大劲才找到的.并且每个版本都试了一遍。以前被谁把默认的文件版本给改了
4、重点来了,因为系统是centos5.8 ,老系统了,与GLIBCXX_3.4 匹配的是libstdc.so.6.0.8
ln修改软链接文件介绍如下:
ln -snf 想要修改成哪个版的文件(libstdc++.so.6.0.8) 链接到哪个文件(ibstdc++.so.6)
执行命令 #ln -snf libstdc++.so.6.0.8 libstdc++.so.6
备注:libstdc++.so.6.0.19 版本好像也行,在一台centos7.5 的系统上是这个版本,也能正常完成编译。
经验总结:出现:undefined symbol: _ZNSt7num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE2idE, version GLIBCXX_3.4 类似的故障现象可以根据报错的路径下看看该版本的文件,与相同系统下的文件是否一致,版本是否一致,对照着找版本才能更快找合适匹配的文件版本,不然一个个试试就是摸瞎,浪费精力。