version `GLIBC_2.14' not found 解决方法.

一般出现类似次问题是当前运行系统Glibc版本低于编译环境Glibc版本造成Glibc版本兼容性造成的.  
通常可以使用-static链接成静态程序即可解决.
不过经过google大神发现还有另外一种方法可以在使用动态库的环境下规避此类问题.

首先查看APP Glibc 兼容性.看当前app使用了哪些Glibc版本.

# objdump -p app
...
Version References:required from libc.so.6:0x06969194 0x00 05 GLIBC_2.140x0d696913 0x00 04 GLIBC_2.30x0d696914 0x00 03 GLIBC_2.40x09691a75 0x00 02 GLIBC_2.2.5

然后查看当前app引用了GLIBC_2.14中哪些函数

# nm app |grep GLIBC_2.14
...
U memcpy@@GLIBC_2.14
...

也可以使用 objdump 查看app动态引用符号表.

# 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实际路径.

# 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 scriptUse the shared library, but some functions are only inthe 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版本信息.

-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信息.

#objdump -p app
...Version References:required from libc.so.6:0x0d696913 0x00 04 GLIBC_2.30x0d696914 0x00 03 GLIBC_2.40x09691a75 0x00 02 GLIBC_2.2.5

发现当前版本需求已不再需要glibc 2.14支持.

# 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

version `GLIBC_2.14' not found 解决方法.相关推荐

  1. Centos6 升级glibc-2.17,解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法

    Centos6 升级glibc-2.17,解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法 参考文章: (1)Centos6 升级glibc-2.17,解决 ...

  2. linux 6.6 最新 gblic,Centos6 升级glibc-2.17,解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法(推荐)...

    出现问题 在Centos6安装mysql 5.7.x 系列提示错误如下: [root@VM_0_5_centos mysql]# rpm -ivh mysql-community-libs-5.7.1 ...

  3. 解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法

    glibc简介: glibc是 GNU发布的libc库,即c 运行库.glibc是 linux系统中最底层的 api,几乎其它任何运行库都会依赖于glibc.glibc除了封装 linux操作系统所提 ...

  4. Linux 2.6.32-279.el6.x86_64 ANDROID SDK碰到”LIBC.SO.6: VERSION `GLIBC_2.14′ NOT FOUND”的解决方法(1)

    1.执行locate libc.so.6找到库的位置;      /lib64/libc.so.6 2.查看系统已支持的版本: strings /lib64/libc.so.6 | grep GLIB ...

  5. Centos6.X升级glibc解决“libc.so.6 version GLIBC_2.14 not found”报错问题

    Centos6.X升级glibc解决"libc.so.6 version GLIBC_2.14 not found"报错问题 参考文章: (1)Centos6.X升级glibc解决 ...

  6. hadoop 2.x安装:不能加载本地库 - 解决libc.so.6 version GLIBC_2.14 not found问题

    hadoop 2.x安装:不能加载本地库 - 解决libc.so.6 version GLIBC_2.14 not found问题 参考文章: (1)hadoop 2.x安装:不能加载本地库 - 解决 ...

  7. 解决libc.so.6: version `GLIBC_2.14' not found问题

    1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引 ...

  8. 升级glic: 解决“libc.so.6: version ‘GLIBC_2.14‘ not found“问题

    升级glic: 解决"libc.so.6: version 'GLIBC_2.14' not found"问题 参考文章: (1)升级glic: 解决"libc.so.6 ...

  9. Linux/Centos下/lib64/libc.so.6: version `GLIBC_2.14' not found问题

    Centos的某个版本下编译了一个可执行程序,复制到另外一个Centos环境下去执行,结果出现了以下错误: /lib64/libc.so.6: version `GLIBC_2.14' not fou ...

  10. /lib64/libc.so.6: version `GLIBC_2.14' not found问题

    在Ubuntu 制作好的交叉编译工具链,在Red Hat中执行时报错:/lib64/libc.so.6: version `GLIBC_2.14' not found 本文使用的Red Hat系统的信 ...

最新文章

  1. 推荐8个轻巧强大的办公工具,高效实用,不容错过
  2. CISCO路由器配置基础2
  3. Java 8 - 01 优雅编程 lambda 以及 @FunctionalInterface注解一点通
  4. vbsedit无法创建空文档_如何用Python快速优雅的批量修改Word文档样式?
  5. Java 判断操作系统类型(适用于各种操作系统)
  6. 在Java 8之前的项目中使用JUnit 5
  7. ie浏览器升级_微软呼吁用户停用IE浏览器 2020年将不再更新升级
  8. 变量和简单数据类型(一)
  9. php 图片 处理,php图片处理类
  10. 最优化学习笔记(十四)——共轭梯度法
  11. python实现tkinter可视化一
  12. PHP中Trait详解及其应用
  13. Matlab电气课程设计,电气工程课程设计——基于Matlab异步电动机调速系统设计
  14. 微信小程序 百度SDK定位 坐标纠偏
  15. hdu 4517 小小明系列故事——游戏的烦恼(统计类题目)
  16. c语言读grd文件,基于GDAL库,读取.grd文件(以海洋地形数据为例)C++版
  17. r语言中的或怎么表示什么不同_R语言 基本语法
  18. LaTeX入门学习9(tikz基础-01)
  19. WordPress发布新文章Email通知注册用户
  20. 遇上裁员,前端开发的糟心

热门文章

  1. CF1041E Tree Reconstruction
  2. webpack5学习与实战-(六)-babel-loader解析js文件
  3. Windows中cmd命令启动Oracle数据
  4. vp230引脚功能_SN65HVD230:具有待机模式的 3.3V CAN 收发器
  5. linux备份文件_aptclone:备份已安装的软件包并在新的 Ubuntu 系统上恢复它们 | Linux 中国...
  6. 基于python 爬虫_基于python的爬虫(一)
  7. python 三维矩阵乘以二维矩阵_python 二维矩阵转三维矩阵示例
  8. StanfordDB class自学笔记 (8) Querying XML
  9. python mpi4py 读取json_mpi4py 点到点通信总结
  10. python 分类变量xgboost_XGBoost的介绍、应用、调参、知识点