给编译好的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.so
    linux-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.so
    linux-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)

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

相关推荐
CAU界编程小白5 分钟前
Linux编程系列之权限理解和基础开发工具的使用(上)
linux·运维·服务器
保持低旋律节奏9 分钟前
linux——进程
linux·运维·服务器
YFLICKERH9 分钟前
【Linux系统】ubuntu - python 虚拟环境搭建|使用|与系统环境的区别
linux·python·ubuntu·虚拟环境
proware11 分钟前
3588 cma heap应用示例之图像采集
linux·cma·dma buf
羊村懒哥14 分钟前
告别命令行查日志!CentOS 安装 ELK 实现可视化监控
linux·elk·centos
txzz888816 分钟前
CentOS-Stream-10 YUM本地仓配置
linux·运维·centos·yum·yum本地仓配置
HalvmånEver19 分钟前
Linux:Ext系列⽂件系统(三)
linux·运维·服务器
伍叁_19 分钟前
shell脚本案例
linux·运维·服务器
qq_54702617920 分钟前
Linux 文件与目录管理
linux·运维·服务器
云声风语24 分钟前
buuCTF练习题misc大白记一次vim配合xxd使用
linux·编辑器·vim