给编译好的so修改rpath为当前路径

2024-01-24 12:04

本文主要是介绍给编译好的so修改rpath为当前路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  这几天调整安装,发现有些文件安装到/lib下。就想复制到安装目录,这样影响更少。然后发现rpath有问题。怎么办?修改为当前路径最好。

  • 当前路径的两种表示方法

.或者$ORIGIN

NEW_RPATH=.:/usr/local/lib/:/lib/aarch64-linux-gnu/
NEW_RPATH=\$ORIGIN:/usr/local/lib/:/lib/aarch64-linux-gnu/

在编译的时候,大多使用$ORIGIN。因为$有特殊含义,所以这里进行了转义。

  • 办法1
patchelf --set-rpath ${NEW_RPATH} libopencv_video.so
  • 办法2
chrpath -r ${NEW_RPATH} libopencv_video.so
  • 修改前
$ ldd libopencv_video.solinux-vdso.so.1 (0x0000007fa127c000)libopencv_imgproc.so.3.4 => /home/toybrick/work/libopencv_imgproc.so.3.4 (0x0000007fa0dd0000)libopencv_core.so.3.4 => /home/toybrick/work/libopencv_core.so.3.4 (0x0000007fa0aae000)libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007fa0923000)libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007fa0866000)libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007fa0842000)libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007fa06d0000)libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000007fa06bc000)libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007fa068d000)libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000007fa0660000)/lib/ld-linux-aarch64.so.1 (0x0000007fa124e000)
  • 修改后
$ ldd libopencv_video.solinux-vdso.so.1 (0x0000007f9bb30000)libopencv_imgproc.so.3.4 => /home/toybrick/package/./libopencv_imgproc.so.3.4 (0x0000007f9b6a7000)libopencv_core.so.3.4 => /home/toybrick/package/pan/./libopencv_core.so.3.4 (0x0000007f9b385000)libstdc++.so.6 => /lib/aarch64-linux-gnu/libstdc++.so.6 (0x0000007f9b1d7000)libm.so.6 => /lib/aarch64-linux-gnu/libm.so.6 (0x0000007f9b11a000)libgcc_s.so.1 => /lib/aarch64-linux-gnu/libgcc_s.so.1 (0x0000007f9b0f6000)libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000007f9af84000)libdl.so.2 => /lib/aarch64-linux-gnu/libdl.so.2 (0x0000007f9af70000)libpthread.so.0 => /lib/aarch64-linux-gnu/libpthread.so.0 (0x0000007f9af41000)libz.so.1 => /lib/aarch64-linux-gnu/libz.so.1 (0x0000007f9af14000)/lib/ld-linux-aarch64.so.1 (0x0000007f9bb02000)

可以看到由编译的绝对路径,变成了相对路径。

这篇关于给编译好的so修改rpath为当前路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/639622

相关文章

python获取指定名字的程序的文件路径的两种方法

《python获取指定名字的程序的文件路径的两种方法》本文主要介绍了python获取指定名字的程序的文件路径的两种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 最近在做项目,需要用到给定一个程序名字就可以自动获取到这个程序在Windows系统下的绝对路径,以下

SpringBoot路径映射配置的实现步骤

《SpringBoot路径映射配置的实现步骤》本文介绍了如何在SpringBoot项目中配置路径映射,使得除static目录外的资源可被访问,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一... 目录SpringBoot路径映射补:springboot 配置虚拟路径映射 @RequestMapp

python设置环境变量路径实现过程

《python设置环境变量路径实现过程》本文介绍设置Python路径的多种方法:临时设置(Windows用`set`,Linux/macOS用`export`)、永久设置(系统属性或shell配置文件... 目录设置python路径的方法临时设置环境变量(适用于当前会话)永久设置环境变量(Windows系统

Java获取当前时间String类型和Date类型方式

《Java获取当前时间String类型和Date类型方式》:本文主要介绍Java获取当前时间String类型和Date类型方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录Java获取当前时间String和Date类型String类型和Date类型输出结果总结Java获取

Go语言编译环境设置教程

《Go语言编译环境设置教程》Go语言支持高并发(goroutine)、自动垃圾回收,编译为跨平台二进制文件,云原生兼容且社区活跃,开发便捷,内置测试与vet工具辅助检测错误,依赖模块化管理,提升开发效... 目录Go语言优势下载 Go  配置编译环境配置 GOPROXYIDE 设置(VS Code)一些基本

Spring Boot中的路径变量示例详解

《SpringBoot中的路径变量示例详解》SpringBoot中PathVariable通过@PathVariable注解实现URL参数与方法参数绑定,支持多参数接收、类型转换、可选参数、默认值及... 目录一. 基本用法与参数映射1.路径定义2.参数绑定&nhttp://www.chinasem.cnbs

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

SQL Server修改数据库名及物理数据文件名操作步骤

《SQLServer修改数据库名及物理数据文件名操作步骤》在SQLServer中重命名数据库是一个常见的操作,但需要确保用户具有足够的权限来执行此操作,:本文主要介绍SQLServer修改数据... 目录一、背景介绍二、操作步骤2.1 设置为单用户模式(断开连接)2.2 修改数据库名称2.3 查找逻辑文件名

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关