修改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= ...
随机推荐
- webpack入门指南(基于webpack v4.41.2)
2019年12月5日初稿,目前webpack已经更新到v4.41.2,本文正是基于该版本,在windows8.1操作系统下进行的demo编译,适用于想入门webpack的前端开发人员. webpack ...
- linux下docker安装部署项目(全)
一 .系统安装 基于CentOS-7-x86_64-Minimal-1708.iso安装系统 1.2. 配置系统 1.2.1 在线更新内核版本(建议更新,旧版内核会有docker BUG) 1.2 ...
- luogu P3183 [HAOI2016]食物链 |记忆化搜索
如图所示为某生态系统的食物网示意图,据图回答第1小题现在给你n个物种和m条能量流动关系,求其中的食物链条数.物种的名称为从1到n编号M条能量流动关系形如a1 b1a2 b2a3 b3......am- ...
- MySql数据基础之数据表操作
MySql数据库中主要利用多个数据表进行数据的存储,我们可以将数据表理解成一个Excel表格,Excel表格的第一列可以将它看为id列,主要任务是数据表中数据的唯一标识,不能重复.不能为空.如果将数据 ...
- 四点之间最短路(spfa+优先队列+枚举优化)UESTC1955喜马拉雅山上的猴子
喜马拉雅山上的猴子 Time Limit: 1000 MS Memory Limit: 256 MB Submit Status 余周周告诉我喜马拉雅山上有猴子,他们知道点石成金的方法.我不信 ...
- Spring Security OAuth2 Demo —— 密码模式(Password)
前情回顾 前几节分享了OAuth2的流程与授权码模式和隐式授权模式两种的Demo,我们了解到授权码模式是OAuth2四种模式流程最复杂模式,复杂程度由大至小:授权码模式 > 隐式授权模式 > ...
- Yii2框架那些折磨人的坑
说点闲话 距离上次写博客,已经有一年了.在动手写之前,总是带着深深的罪恶感.被它折磨许久,终于,还是,动手了. 值得庆祝的一件事:最近开始健身了.每天动感单车45分钟,游泳45分钟,真的是(生)爽(不 ...
- Java并发编程系列-(1) 并发编程基础
1.并发编程基础 1.1 基本概念 CPU核心与线程数关系 Java中通过多线程的手段来实现并发,对于单处理器机器上来讲,宏观上的多线程并行执行是通过CPU的调度来实现的,微观上CPU在某个时刻只会运 ...
- FPGA之驱动sdram控制兼容性移植实验
cb早在2012年就推出了VIP 视频开发板 V1.4 这套开发板是ep2的,摄像头是ov7670,虽然不如当前的vip20强大,但也算是其雏形. 在vip20后期,cb对sdram以及其他模块进行 ...
- Electron:主进程和渲染进程