今天在suse 10下写了一个测试程序,使用了hash_map,重载了hash函数,编译通过。运行时报错,提示:
" /usr/loca/lib/libstdc++.so.6: version GLIBCXX 3.4.5 not found"
想起上周有几个同事也遇到这个问题,我的解决办法如下:
ldconfg -p|grep libstdc++
出现一堆的链接文件:
libstdc++.so.6 --> libstdc++.so.6--->/usr/local/lib/libstdc++.so.6
libstdc++.so.6 --> libstdc++.so.6--->/usr/lib/libstdc++.so.6
*****
对比 /usr/local/lib/libstdc++.so.6 和 /usr/lib/libstdc++.so.6发现,2个文件差别很大.显然系统中安装了2个不同版本的gcc,在/usr/local下找到了一个gcc3.4.5的安装目录。
打开/etc/ld.so.conf , 发现其中有一条/usr/local/lib,制定了lib库的默认链接路径
在ld.so.conf中加上/usr/lib,保存,运行./ldconfig
问题解决。
suse10自带的是 gcc4.1的编译器,再安装一个gcc3.4.5编译器就出先默认库文件路径错误的情况了。
同一台机器上安装2个以上版本gcc时需要特别注意,其实只需要拷贝需要安装的gcc目录下的 bin ,include,lib文件夹到目标机上即可。在/usr/bin下设置不同的软链,例如gcc3,gcc2,gcc4,链接到不同的文件上。再运行时通过设置LD_LIBRARY_PATH 变量来指定不同的链接库路径。就可以避免上述问题的发生。