在Linux上使用更高的gcc/g++版本编译生成的动态库来链接应用程序时,会出现“/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found”的问题。
我们使用ldd检查动态库的依赖性,如下所示。
[root@localhost lin32]# lddlibcxxsingletondll.so
./libcxxsingletondll.so:/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.14' not found (required by./libcxxsingletondll.so)
linux-gate.so.1=> (0x00447000)
libstdc++.so.6=> /usr/lib/libstdc++.so.6 (0x001be000)
libm.so.6=> /lib/libm.so.6 (0x00d36000)
libgcc_s.so.1=> /lib/libgcc_s.so.1 (0x00145000)
libc.so.6=> /lib/libc.so.6 (0x002ab000)
/lib/ld-linux.so.2(0x007cc000)
原因在于libstdc++.so.6的版本过低,需要下载新版本的lib文件重新建立连接才行。
使用strings命令检查libcxxsignletondll.so使用的GLIBC的版本:
[root@localhost lin32]# stringslibcxxsingletondll.so | grep GLIBC
GLIBC_2.0
GLIBC_2.1
GLIBC_2.3
GLIBC_2.1.3
GLIBC_2.3.2
GLIBCXX_3.4.9
GLIBCXX_3.4.14
GLIBCXX_3.4.11
GLIBCXX_3.4
使用strings命令检查libstdc++.so使用的GLIBC版本:
[root@localhost lin32]# strings/usr/lib/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
GLIBC_2.0
GLIBC_2.3
GLIBC_2.4
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH
从上面可以看出libstdc++.so.6中缺少GLIBCXX_3.4.14,所以会出现GLIBCXX_3.4.14没有找到的错误。
检查/usr/lib目录下的libstdc++.so.6的库文件:
[root@localhost lin32]# ll/usr/lib/libstdc++.so.6*
lrwxrwxrwx. 1 root root 19 12月 2 2010 /usr/lib/libstdc++.so.6 ->libstdc++.so.6.0.13
-rwxr-xr-x. 1 root root 942040 7月 26 2010/usr/lib/libstdc++.so.6.0.13
发现libstdc++.so.6链接到libstdc++.so.6.0.13上,但是libcxxsingletondll.so需要使用的是libstdc++.so.6.0.14。
百度下libstdc++.so.6.0.14,找到该库的网址:
http://download.csdn.net/download/wuquan_1230/3608148
从其它版本高的机器上拷贝libstdc++.so.6.0.14到本地,然后拷贝到/usr/lib目录下,并且建立软链接,命令如下:
# sodu ln -sf libstdc++.so.6.0.14libstdc++.so.6
[root@localhost lin32]# stringslibstdc++.so.6.0.14 | 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
GLIBC_2.0
GLIBC_2.3
GLIBC_2.4
GLIBC_2.3.4
GLIBC_2.1
GLIBC_2.1.3
GLIBC_2.3.2
GLIBC_2.2
GLIBCXX_FORCE_NEW
GLIBCXX_DEBUG_MESSAGE_LENGTH