修改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

linux修改程序依赖lib,修改so库中的依赖名相关推荐

  1. jcenter库中的依赖包无法下载

    jcenter库中的依赖包无法下载 react-native打包失败 解决办法 react-native打包失败 今天突然发现react-native项目打包失败,仔细查看发现是因为jcenter库中 ...

  2. 【linux】程序找不到动态库.so的解决办法|查看.so动态库信息|.so动态库加载顺序

    目录 找不到.so解决方法 方法一:添加环境变量 方法二:复制so文件到lib路径 方法三:(推荐)添加ldconfig寻找路径 方法四:在编译目标代码时指定该程序的动态库搜索路径 让程序在本目录找到 ...

  3. gradle 查看依赖类库版本_Android studio中查看依赖的第三方库的历史版本和最新版本...

    在日常开发过程中,我们通过会依赖很多的第三方库项目.类似这样: dependencies { compile 'com.android.support:support-v4:24.2.1' compi ...

  4. es6 依赖循环_探索 JavaScript 中的依赖管理及循环依赖

    我们通常会把项目中使用的第三方依赖写在 package.json 文件里,然后使用 npm .cnpm 或者 yarn 这些流行的依赖管理工具来帮我们管理这些依赖.但是它们是如何管理这些依赖的.它们之 ...

  5. Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名...

    查询所有表名: select t.table_name from user_tables t; 查询所有字段名: select t.column_name from user_col_comments ...

  6. linux应用程序启动时加载库错误问题

    ldd text查看依赖库 ln -s /lib64/libpcre.so.0 /usr/local/lib/libpcre.so做软连接 转载于:https://www.cnblogs.com/da ...

  7. java怎么修改程序图标_修改JAVA程序图标名字方法 - 【天堂论坛】玩机到天堂 买机找海洋 - Powered By BBSXP...

    引子:我们知道,有许多JAVA程序并不是特别为小E设计的,所以都没有JAVA图标(一律显示在手机上为白色底版+一点红).看上去清一色"红中"煞风景.因此,我们可以通过修改JAVA程 ...

  8. dumpbin查看lib、dll库中函数

    利用VS工具中的dumpbin.exe可以查看lib.dll中的函数,查了的命令如下: 本电脑安装的VS2017,dumpbin.exe的路径在D:\Program Files (x86)\Micro ...

  9. oracle 查询表字段6,Oracle 查询库中所有表名、字段名、字段名说明,查询表的数据条数、表名、中文表名、...

    --创建用户 create user "用户名" identitied by "密码": --给自己修改密码 查询所有表名: select t.table_na ...

最新文章

  1. 21天养成习惯?不一定
  2. [Codeforces 10E] Greedy Change
  3. APM - Javassist 入门 生成一个简单类
  4. swift optionals - 1
  5. python爬虫百度贴吧代码大全_零基础写python爬虫之抓取百度贴吧代码分享
  6. Tomcat JVM 初始化加大内存
  7. GPU版本的Keas安装
  8. jQuery end()函数示例
  9. 动态规划--总体理解
  10. tomcat启动成功 未加载项目_智云CRM项目启动大会在深圳成功召开
  11. python dict下标_牛鹭学院:必须掌握的Python数据结构知识
  12. 邹博机器学习算法最新版 --- 献给想要入门、或者想要进阶的朋友
  13. 单片机毕业设计不用愁!!30篇单片机毕业设计参考案例
  14. Bootstrap-table固定表头并美化表头
  15. VS2015调试程序
  16. 装修纪~~从装修中体味人生
  17. MEMS激光雷达监测法兰克福机场客流量应用案例
  18. centos linux系统后门程序
  19. 互联网星星的QWPS Office分享B2B成功秘笈
  20. Error: Cannot find module 'util-deprecate'

热门文章

  1. 简述计算机驱动安装顺序,5、驱动程序安装的科学顺序
  2. 你知道视频怎么转音频?这两个转换小技巧你值得拥有
  3. 如何使用有效的客户体验管理方法,提升产品用户体验?
  4. 哈工大计算机科学与技术教学方案,计算机科学与技术学科硕士研究生培养方案-哈工大计算机学院...
  5. 技术市场分析:闪存阵列中默默服务的SAS SSD
  6. 安卓饼状图设置软件_安卓(Android)开发之自定义饼状图
  7. HTML积分小游戏,js实现带积分弹球小游戏
  8. 查询是谁在用挂载的硬盘
  9. 2019icpc上海站总结
  10. 解决 An HTTP error occurred when trying to retrieve this URL.问题