修改so库中的依赖名
修改so库中的依赖名
在ArchLinuxArm上有一些针对aarch64, arm, armeabi-v7a等Android常用架构的so库可以下载,有时候可以省去很多编译时间,且都是编译optimize比较好的版本,而且基本都是最新版本的代码编译的。比如SuiteSparse就是例子。但是,下载的so都是遵守Linux的动态版本管理体系的,即so后面含有版本号。而在Android中没有这一套,不能直接拿来使用。我们可以使用patchelf来实现这目标。
以SuiteSpares中的libcholmod.so.3.0.13,先使用命令readelf -d libcholmod.so.3.0.13读取其NEED库如下:
标记 类型 名称/值
0x00000001 (NEEDED) 共享库:[libm.so.6]
0x00000001 (NEEDED) 共享库:[libamd.so.2]
0x00000001 (NEEDED) 共享库:[libcolamd.so.2]
0x00000001 (NEEDED) 共享库:[libsuitesparseconfig.so.5]
0x00000001 (NEEDED) 共享库:[libccolamd.so.2]
0x00000001 (NEEDED) 共享库:[libcamd.so.2]
0x00000001 (NEEDED) 共享库:[libmetis.so]
0x00000001 (NEEDED) 共享库:[liblapack.so.3]
0x00000001 (NEEDED) 共享库:[libblas.so.3]
0x00000001 (NEEDED) 共享库:[libgomp.so.1]
0x00000001 (NEEDED) 共享库:[libgcc_s.so.1]
0x00000001 (NEEDED) 共享库:[libpthread.so.0]
0x00000001 (NEEDED) 共享库:[libc.so.6]
0x00000001 (NEEDED) 共享库:[ld-linux-armhf.so.3]
0x0000000e (SONAME) Library soname: [libcholmod.so.3]
0x0000000c (INIT) 0x4c04
去掉so中的版本号
在Android中,没有像Linux中一样有linkname, soname, realname这种版本控制,所以,我们可以把NEEDED中的这种带版本的soname改为linkname,使用命令 patchelf --replace-needed libm.so.6 libm.so libcholmod.so.3.0.13,即把其依赖的libm.so.6改为了libm.so
标记 类型 名称/值
0x00000001 (NEEDED) 共享库:[libm.so]
0x00000001 (NEEDED) 共享库:[libamd.so.2]
更改soname
使用命令patchelf --set-soname libnewname.so.3.4.5 path/to/libmylibrary.so.1.2.3,结果:由libcholmod.so.3变成了libcholmod.so
0x00000001 (NEEDED) 共享库:[ld-linux-armhf.so.3]
0x0000000e (SONAME) Library soname: [libcholmod.so]
0x0000000c (INIT) 0x4c04
0x0000000d (FINI) 0xc2674
去掉自己的版本号
mv libcholmod.so.3.0.13 libcholmod.so
修改so库中的依赖名的更多相关文章
- 修改SQL Server中的计算机名
安装SQL Server之后,如果修改计算机名会导致登录异常,或者某些功能不能用,例如配置Replication时会提示如下错误: SQL Server replication requires th ...
- 微软企业库5.0 学习之路——扩展学习篇、库中的依赖关系注入(重构 Microsoft Enterprise Library)[转]
这篇文章是我在patterns & practices看到的一篇有关EntLib5.0的文章,主要介绍了EntLib5.0的这次的架构变化由来,觉得很不错,大家可以看一下! 在过去几年中,依赖 ...
- Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、
查询所有表名:select t.table_name from user_tables t;查询所有字段名:select t.column_name from user_col_comments t; ...
- 【转】Oracle 查询库中所有表名、字段名、表名说明、字段名说明
转自 :http://gis-conquer.blog.sohu.com/170243422.html 查询所有表名:select t.table_name from user_tables t; 查 ...
- Oracle 查询库中所有表名、字段名、表名说明、字段名说明(原创)
查询所有表名:select t.table_name from user_tables t;查询所有字段名:select t.column_name from user_col_comments t; ...
- Android中的依赖问题(五种依赖、eclipse、AS、添加第三方库、jar)
这篇文章的主题是: 依赖是什么 eclipse中的依赖 AS中的依赖(有一篇详细的文章讲得非常好,这里就不再写了http://blog.csdn.net/yy1300326388/article/de ...
- SVNKIT的low api应用之修改库中文件内容(File modification)
最近在做一个仓库管理系统,架构在svn之上.要求每一项操作要记录在log文件中,弄了很久起初感觉无法向库中的文本文件添加东西,就是修改库中的文本文件.于是采用了一个很笨的办法: 现将库中的log ...
- Android Studio修改项目中整体包名
莫名的需求,要把之前的apk分成三个不同的apk,还要在应用市场能够上线,麻麻滴这样一听那还不要各个apk包的包名不同以及apk签名文件也不同嘛(签名文件一般也用不同,为防止上线冲突嘛).所以就亲自尝 ...
- MySql 查询数据库中所有表名以及对比分布式库中字段和表的不同
查询数据库中所有表名select table_name from information_schema.tables where table_schema='数据库名' and table_type= ...
随机推荐
- MySQL必知必会(通配符过滤Like,%,_)
SELECT prod_id, prod_name FROM products WHERE prod_name LIKE 'jet%'; #百分号(%)表示任何字符出现任意次数, %不能匹配值为NUL ...
- SI4432和SI1212通讯
SI4432是美国Silabs研发的一款工作频段低于1GHz的高性能射频收发芯片,属于其EzRadioPro系类.在国内已经广泛应用于工业.科研.医疗(ISM)以及短距离无线通信设备(SRD),其输出 ...
- 制作通用framework的几点注意
一.创建framework,调成静态的framework . 二.匹配bitcode 三.增加-ObjC 在BuildSettting ->Linking->Other Linker Fl ...
- ios开发之block的使用,及注意事项
转自:http://my.oschina.net/u/1432769/blog/390401 Block作为C语言的扩展,并不是高新技术,和其他语言的闭包或lambda表达式是一回事.需要注意的是由于 ...
- java中List、Map、Set、Stack、Queue、Collections等的使用
java中List.Map.Set.Stack.Queue.Collections等的使用 List 创建方法: List<String> list=new ArrayList<&g ...
- UVA-1608
We were afraid of making this problem statement too boring, so we decided to keep it short. A sequen ...
- Selenium之勾选框操作
勾选框操作: 所谓勾选框,意思是可以勾选一个及以上或全部勾选.勾选框的图标一般都是方形的. 复选框勾选一般分为三种情况: ①勾选单个框,我们直接用元素定位的方式定位到点击即可. ②勾选多个 ...
- 网络安全之Windows基础
1.黑客常用DOS命令 基础: telnet服务:telnet 192.168.1.141 (默认没有打开telnet服务) 常用: color a ping -t -l 65550 ip 死亡之pi ...
- Python多版本管理器pyenv
查看Linux版本 [root@web ~]# cat /etc/redhat-release CentOS Linux release (Core) [root@web ~]# uname -a L ...
- Python生成器的用法
生成器,一定情况下可以节省很多空间 比如: >>> b = (x for x in range(10)) >>> b <generator object &l ...