version `GLIBC_2.14′ not found 解决方法.
2014-12-25 14:30
447 查看
version `GLIBC_2.14′ not found 解决方法.
2013年08月04日 ⁄ 综合⁄ 共 3417字 ⁄ 字号小 中 大 ⁄
评论关闭
参考:
/article/1667258.html
http://blog.csdn.net/iomato/article/details/8462768
=================================================================
version `GLIBC_2.14' not found 解决方法.
一般出现类似次问题是当前运行系统Glibc版本低于编译环境Glibc版本造成Glibc版本兼容性造成的.
通常可以使用-static链接成静态程序即可解决.
不过经过google大神发现还有另外一种方法可以在使用动态库的环境下规避此类问题.
首先查看APP Glibc 兼容性.看当前app使用了哪些Glibc版本.
[plain] view
plaincopy
# objdump -p app
...
Version References:
required from libc.so.6:
0x06969194 0x00 05 GLIBC_2.14
0x0d696913 0x00 04 GLIBC_2.3
0x0d696914 0x00 03 GLIBC_2.4
0x09691a75 0x00 02 GLIBC_2.2.5
然后查看当前app引用了GLIBC_2.14中哪些函数
[plain] view
plaincopy
# nm app |grep GLIBC_2.14
...
U memcpy@@GLIBC_2.14
...
也可以使用 objdump 查看app动态引用符号表.
[plain] view
plaincopy
# objdump -T app |grep GLIBC_2.14
...
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.14 memcpy
...
上例显示app引用 2.14 版本中的memcpy函数.
下面将用到 gcc 的一个特性实际上是ld的特性.可以将引用符号绑定到一个特定版本.只需在.c文件中写入类似代码.
__asm__(".symver original_foo,foo@VERS_1.1");
即可.
查找当前系统glibc版本中memcpy的各个版本.
获取libc.so实际路径.
[plain] view
plaincopy
# gcc --print-file-name=libc.so
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/../../../../lib64/libc.so
# file /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/../../../../lib64/libc.so
/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/../../../../lib64/libc.so: ASCII text
-bash-4.1# cat /usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.1/../../../../lib64/libc.so
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-x86-64)
GROUP ( /lib64/libc.so.6 /usr/lib64/libc_nonshared.a AS_NEEDED ( /lib64/ld-linux-x86-64.so.2 ) )
-bash-4.1# file /lib64/libc.so.6
/lib64/libc.so.6: symbolic link to `libc-2.16.so'
获取memcpy版本信息.
[plain] view
plaincopy
-bash-4.1# nm /lib64/libc-2.16.so |grep memcpy
...
000000000008a6d0 i memcpy@@GLIBC_2.14
0000000000084ab0 i memcpy@GLIBC_2.2.5
...
可以看出memcpy最低版本是("@GLIBC_2.2.5")2.2.5,而默认使用版本是2.14("@@GLIBC_2.14")
这里我们只要将 glibc 2.14 版本memcpy降到glibc 2.2.5. 在源代码写入以下代码
__asm__(".symver memcpy,memcpy@GLIBC_2.2.5");
重新编译.
再次查看app信息.
[plain] view
plaincopy
#objdump -p app
...
Version References:
required from libc.so.6:
0x0d696913 0x00 04 GLIBC_2.3
0x0d696914 0x00 03 GLIBC_2.4
0x09691a75 0x00 02 GLIBC_2.2.5
发现当前版本需求已不再需要glibc 2.14支持.
[sql] view
plaincopy
# objdump -T app |grep memcpy
0000000000000000 DF *UND* 0000000000000000 GLIBC_2.2.5 memcpy
memcpy已完全修改为Glibc 2.2.5支持.
至此完美解决. 再次运行app一切完美.
参考:
http://www.trevorpounds.com/blog/?p=103 http://www.trevorpounds.com/blog/?tag=symbol-versioning http://ftp.gnu.org/old-gnu/Manuals/ld-2.9.1/html_node/ld_25.html http://web.eecs.umich.edu/~prabal/teaching/eecs373-f10/readings/Linker.pdf http://www.technovelty.org/c/symbol-versions-and-dependencies.html
查看系统glibc支持的版本:
[cpp] view
plaincopy
[ghui@StuOS bin]$ strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
GLIBC_2.3
GLIBC_2.3.2
GLIBC_2.3.3
GLIBC_2.3.4
GLIBC_2.4
GLIBC_2.5
GLIBC_2.6
GLIBC_2.7
GLIBC_2.8
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE
如果是Ubuntu12.04版本:libc.so的目录在这里:
/lib/x86_64-linux-gnu/libc-2.15.so
为了方便,可以按如下链接方式将其软链到/lib目录下:
http://www.emmalzhang.com/robotTech/2012/05/10/matlab-starting-error-in-ubuntu-12-04-libc-so-6-not-found/
http://askubuntu.com/questions/127405/matlab-cant-find-lib-libc-so-6-in-12-04
如果更新GLIBC成功后,可能仍会有程序报错:
linux/rcupdate.h: size of unnamed array is negative.
将-O2加入编译选项试试!
相关文章推荐
- version `GLIBC_2.14' not found 解决方法.
- version `GLIBC_2.14' not found 解决方法.
- CENTOS 6下ANDROID SDK碰到提示”LIBC.SO.6: VERSION `GLIBC_2.14′ NOT FOUND”的解决方法
- 解决libc.so.6: version `GLIBC_2.14' not found问题
- 解决libc.so.6: version `GLIBC_2.14' not found问题
- version `GLIBC_2.14' not found 解决方法.
- libc.so.6 version GLIBC2.14 not found 解决办法
- linux:/lib/libc.so.6: version `glibc_2.7′ not found【没有解决】采用新方法达到目的
- 解决libc.so.6: version `GLIBC_2.14' not found问题
- Centos6.5 升级glibc解决“libc.so.6: version GLIBC_2.14 not found”
- version `GLIBC_2.14' not found 解决方法.
- 升级glibc到glibc-2.14 解决version `GLIBC_2.14' not found 问题
- 解决libc.so.6: version `GLIBC_2.14′ not found问题
- 解决"libc.so.6: version `GLIBC_2.14' not found"问题 试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found
- version `GLIBC_2.14' not found 解决方法.
- version `GLIBC_2.14' not found 解决方法.
- version `GLIBC_2.14' not found 解决方法
- version `GLIBC_2.14' not found 解决方法.
- 解决libc.so.6: version `GLIBC_2.14' not found问题
- 解决libc.so.6: version `GLIBC_2.14' not found问题