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

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

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.14
    0x0d696913 0x00 04 GLIBC_2.3
    0x0d696914 0x00 03 GLIBC_2.4
    0x09691a75 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 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版本信息.
-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.3
    0x0d696914 0x00 03 GLIBC_2.4
    0x09691a75 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

`GLIBC_2.14not found 终极解决方案 问题描述 今天子涵先生本来想在服务器上部署一个mindoc的在线文档,执行安装命令./mindoc_linux_amd64 install时发生报错: /lib64/libc.so.6: version `GLIBC_2.14' not found 网上的好多种处理方法需要删除软连接,有的博客还算有点良心,指出了删除软连接之后存在的问题,还好我多看了几篇,没有鲁莽操作~不然后果不堪设想。 解决方案 最终子涵先生的解决方式是直接升级glibc版本到2.17: wget http://ftp.gnu.org/ 阅读详情

相关推荐

解决 version `GLIBC_2.14not found 错误

glibc版本小于2.14的系统上,运行高版本gcc编译的程序是会出现以下错误: version `GLIBC_2.14' not found 解决方案有以下几种: 1. 静态编译 -static-libgcc -static-libstdc++ -nodefaultlibs -shared -fPIC 2. 在源文件中添加以下代码,并重新编译 __asm__(".symver memcpy,memcpy@GLIBC_2.2.5"); 3. 使用glibc版本小于2.14的系...

ayang1986的专栏 2865

version `GLIBC_2.14not found 问题解决

错误 /lib64/libc.so.6: version `GLIBC_2.14not found 解决 使用命令查看是否存在GLIBC_2.14 strings /lib64/libc.so.6 | grep GLIBC 如果没有运行以下命令 wget http://ftp.gnu.org/gnu/glibc/glibc-2.17.tar.gz tar -xf glibc-2.17.tar....

Baimoc 2万+

libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案

线上一台服务器执行teradata数据的Dsql的程序时报错:“libc.so.6: version `GLIBC_2.14not found”,排查原因及解决方案如下: 1)产生原因:是由于Linux系统的glibc版本太低,而软件编译时使用了较高版本的glibc引起的! 查看系统glibc支持的版本 [root@localhost ~]# strings /lib64/libc.so.6 ...

WUXIAOKAI的专栏 3533

glibc版本 GLIBC_2.14 not found问题解决方法

glibc 版本(version `GLIBC_2.14not found)问题 目录 简述 解决这个问题的程序 1、 glibc_hack 脚本 2、修改高版本依赖到低版本的小程序 参考资料 简述# 很多时候,没法使用高版本系统,或者升级 glibc 版本,导致很多兼容性问题。这类的答案网上有很多,给出的解决方案也不少,这里做个简单的记录,方便参考。 大致来说,有这么几种方式: 在低版本环境下编译,在高版本环境下使用。(比如在 centos 6 上使用 gcc 编译的程序,可以跑在 ubuntu 18

geotiger的博客 6232

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

解决 version GLIBC_2.14 not found方法 【下载地址】解决versionGLIBC_2.14notfound方法 本开源项目专注于解决version `GLIBC_2.14` not found”这一常见问题,帮助用户顺利运行依赖特定版本glibc库的软件。项目详细介绍了如何查找并安装所...

gitblog_06789的博客 809

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

在服务器上编译的a.exe文件放到本机运行出现version `GLIBC_2.14' not found 经过

2579

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

version `GLIBC_2.14not found 解决方法. 2013年08月04日 ⁄ 综合⁄ 共 3417字 ⁄ 字号 小 中 大 ⁄ 评论关闭 参考: http://blog.csdn.net/force_eagle/article/details/8684669 http://blog.csdn.net/iomato/article/details/846

yandaqijian的专栏 957

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

1、执行locate libc.so.6找到库的位置;     /lib64/libc.so.62、查看系统已支持的版本:     strings /lib64/libc.so.6 | grep GLIBC |tail -n 8——————————————————————————————————————————————下载使用的是Android SDK Ver 25.2.5 Platform To...

lxlmycsdnfree的博客 928

【linux】提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

http://www.myexception.cn/linux-unix/1622052.html

teisei-din 1276

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

解决libc.so.6: version `GLIBC_2.14' not found问题0.以下在系统CentOS 6.3 x86_64上操作1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的: [ghui@StuOS bin]$ pw...

weixin_33751566的博客 551

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

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

w36680130的博客 242

ImportError: /lib64/libc.so.6: version `GLIBC_2.14' not found xxxx libc.so.6: `GLIBC_2.14' not found

报错信息: ImportError: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /xxxx/.py3/lib/python3.6/lib-dynload/_bz2.cpython-36m-x86_64-linux-gnu.so) libc.so.6: `GLIBC_2.14' not found 解决...

杨鑫newlife的专栏 2753

【Linux】tar.xz的解压命令 和解决libc.so.6: version `GLIBC_2.14' not found问题

【Linux】tar.xz的解压命令2016年08月29日 20:59:21阅读数:25083对于不熟悉的东西,先记下来再说。今天下载到了一份tar.xz结尾的压缩文件,需要解压的话,有两种方式:123// 可以看到这个压缩包也是打包后再压缩,外面是xz压缩方式,里层是tar打包方式。$ xz -d ***.tar.xz$ tar -xvf ***.tar解决libc.so.6: version ...

大JAVA解决方案 2614

linux编译glibc和提醒"libc.so.6: version `GLIBC_2.14' not found"系统的glibc版本太低

【linux】提示"libc.so.6: version `GLIBC_2.14' not found",系统的glibc版本太低 0.以下在系统CentOS 6.3 x86_64上操作 1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的:

云守护的专栏 9929
上一篇: REINSTALL / RECOVER GRUB FROM UBUNTU LIVE CD / USB
下一篇: Intel Sandy Bridge
功名半纸
功名半纸 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄26年 1137粉丝 282原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值