version `GLIBC_2.14' not found 解决方法.
from http://blog.csdn.net/force_eagle/article/details/8684669
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
version `GLIBC_2.14' not found 解决方法.的更多相关文章
- CentOS "libc.so.6: version 'GLIBC_2.14' not found"解决方法,同理'GLIBC_2.15' not found"
出现"libc.so.6: version 'GLIBC_2.14' not found"问题,是由于glibc版本过低,升级glibc即可. 由于CentOS系统RPM源目前gl ...
- 【问题】CentOS6.5系统"libc.so.6: version 'GLIBC_2.15' not found"解决方法
出现"libc.so.6: version 'GLIBC_2.15' not found"问题,是由于glibc版本过低,升级glibc即可. 由于CentOS系统RPM源目前gl ...
- 解决Requires: libc.so.6(GLIBC_2.14)(64bit)错误解决方法
glibc简介: glibc是GNU发布的libc库,即c运行库.glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc.glibc除了封装linux操作系统所提供的系统服 ...
- version `GLIBC_2.17' not found 解决方法
1.先查看是哪个函数用的是GLIBC_2.17 root@emb-pc:/home/emb/temp# nm lib61850.so | grep GLIBC_2.17 U clock_gettime ...
- 解决libc.so.6: version `GLIBC_2.14' not found问题, 升级glibc,glibc-2.15
0.以下在系统CentOS 6.3 x86_64上操作 1.试图运行程序,提示"libc.so.6: version `GLIBC_2.14' not found",原因是系统的g ...
- rhel 6 version `GLIBC_2.14' not found (required by /usr/lib64/libstdc++.so.6)以及libstdc++.so.6: version GLIBCXX_3.4.18 not found解决办法
最近在oracle linux 7.3下开发了个应用,发布到rhel 6.5运行的时候,报version `GLIBC_2.14' not found (required by /usr/lib64/ ...
- 关于centos6版本执行程序报错:libc.so.6: version GLIBC_2.14 not found的解决
执行后程序报错: libc.so.6: version GLIBC_2.14 not found 这种情况是因为当前服务器glibc的版本比较低造成的(不出意外是glibc_2.12是最高版本): 1 ...
- libc.so.6: version 'GLIBC_2.14' not found报错提示的解决方案
线上一台服务器在执行leveldb程序的时候,报错:"libc.so.6: version `GLIBC_2.14' not found". 排查原因及解决方法如下: 1)产生原因 ...
- 执行SDK的aapt报错./aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./aapt)
问题| 执行SDK下的aapt报错./aapt: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by ./aapt) ../ ...
随机推荐
- ViewPage + RadioGroup + Fragment学习
底部是RadioGroup中RadioButton的切换.上面时ViewPage ,能够滑动,假设你们的需求是不须要滑动的话,那就直接用FrameLayout就能够了. 以下将会用两种方式实现.请大家 ...
- HDUOj Ignatius and the Princess III 题目1002
母函数 组合数学 #include<stdio.h> int c1[125]; int c2[125]; int main() { int n,i,j,k; while(scanf ...
- 算法笔记_189:历届试题 横向打印二叉树(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 二叉树可以用于排序.其原理很简单:对于一个排序二叉树添加新节点时,先与根节点比较,若小则交给左子树继续处理,否则交给右子树. 当遇到空子树 ...
- MySQL 联合索引测试3
接上一篇文章: http://www.cnblogs.com/xiaoit/p/4430387.html 有时候会出现某字段建立一个索引,但是查看执行计划的时候发现还是全扫了表? 可以强制走下索引看看 ...
- java 读写csv
import java.io.IOException; import java.nio.charset.Charset; import com.csvreader.CsvReader; import ...
- How to use OpenChatter in my addon
from:https://doc.openerp.com/trunk/mail/mail_openchatter_howto/ A small my_task model will be used a ...
- 【转】SQL2008的sa账户被禁用,其他账户无法连接的解决方法
或者你还有其它的sysadmin权限的账号,你可以用此账号登录,重置SA密码. 但是在以下情况下,怎么办呢? 1. SA密码丢失或者SA账号被禁用. 2. 你进行了一些安全操作,把BuiltinAdm ...
- KnockoutJS + My97DatePicker b
如何将Knockoutjs和其他脚本库结合使用?这里给出一个Knockoutjs与my97datepicker配合使用的例子,例子中使用了ko的自定义绑定功能: ko.bindingHandlers. ...
- 微信小程序“信用卡还款”项目实践
小程序概述 11月3日晚,微信团队对外宣布,微信小程序开放公测.开发者可登陆微信公众平台申请,开发完成后可以提交审核,公测期间暂不能发布. 我们前一段时间也进行了小程序开发,现在来对之前的开发体验做一 ...
- idea搭建简易ssm项目
按照http://www.cnblogs.com/hackyo/p/6646051.html来搭建ssm框架,一步成功,特此记录一下. 本机环境: idea2017.3 jdk1.8 mysql5.5 ...