动态库的gcc版本不一致造成的编译问题的解决办法

在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

你可能感兴趣的:(Linux编程)