动态库的gcc版本不一致造成的编译问题的解决办法
2012-12-20 23:34
1371 查看
在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
我们使用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
相关文章推荐
- nginx反向代理tomcat,由于客户端输入的端口不一致造成网页basehref错误的问题及解决办法
- JDK环境和编译版本一致 依然Unsupported major.minor version错误解决办法
- Indy 编译提示版本不一致问题的解决
- Android源码编译gcc版本过高解决办法
- 64位Ubuntu 12.04下编译android gcc版本过高问题解决
- S3C44B0x 开cache后造成不一致问题的解决办法
- 解决 gcc/g++ 编译动态库通过却无法运行的问题
- Android 编译出错版本匹配问题解决办法
- hadoop里需要的libhadoop.so版本不一致导致问题及解决办法
- gcc编译静态库到自己的程序 解决在不同linux下因libc版本问题而不能运行
- cocos2d-x 编译 Anroid版本遇到的问题以及解决办法
- 利用arm-elf-gcc编译boa的问题及解决办法
- 如何降低自己的gcc版本--解决ubuntu12.04编译layer的问题
- android studio编译项目因为V7包版本问题报错的解决办法
- 利用arm-elf-gcc编译boa的问题及解决办法
- gcc跨版本编译出现“浮点数例外”错误解决办法
- 导入github下载的项目时,由于gradle版本不同而造成的无法编译解决办法
- 【游戏开发备注之一】关于Cocos2dx_v1.x版本iphone与Android运行出现图片白块、添加GameCenter报错问题及编译Android闪退的解决办法&&CCLOG与CClog的区别
- 64位Ubuntu 11.10下编译android gcc版本过高问题解决
- cocos2d-x 编译 Anroid版本遇到的问题以及解决办法