修改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. UI设计培训之UI设计系统知识
  2. python 打开当前目录的txt文件-Python - 读取其他文件夹/目录中的文本文件
  3. 第二十六天 iptables的nat功能
  4. IPv6套接字编程介绍
  5. ProxySQL 监控和统计
  6. Unix中的I/O模型和Java NIO
  7. 干货|MIT线性代数课程精细笔记[第二课]
  8. 杂项-Java:JBoss
  9. c语言学习与应用 北京邮电大学出版社,《C语言程序设计与应用》低价购书_计算机与互联网_孔网...
  10. 如何将多个PDF合成为一个PDF,并且大小统一?
  11. Request获取url各种信息的方法
  12. 杠杠做的全屏随鼠标滚动显示图片,类似于PPT效果
  13. 小米5x对标OV,突围荣耀,能否成功?
  14. Intellij IDEA--修改JDK版本
  15. win10用账户登录计算机,Win10支持两种账户登录,一种是本地账户,另一种是Microsoft账户...
  16. 很不错的正则表达式前端使用手册
  17. w7上 android模拟器,win7系统运行安卓模拟器的操作方法
  18. git 如何进行版本回退?
  19. 【Hawk】高级教程——post参数采集万方医学网论文
  20. Garrett Motion将在Auto Shanghai 2021上展示用于混合动力汽车和燃料电池汽车的下一代电动助力技术

热门文章

  1. tortoise-orm关于pydantic序列化模型外键字段无法生成的问题
  2. html5动画缩小,javascript – 如何平滑地动画缩放HTML5画布fillText()
  3. 一个简单的U3d生存游戏制作
  4. 微软office在线预览使用及隐藏的坑
  5. IntelliJ IDEA安装破解图文教程
  6. QA The C compiler “C:/xxx/bin/gcc.exe“ is not able to compile a simple test Program.
  7. php 断点续传,PHP简单实现断点续传下载的方法
  8. Golang机器学习框架
  9. MySQL:Innodb恢复的学习笔记
  10. 香港内推 | 香港中文大学袁武老师招收计算机视觉/医学图像分析方向RA