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

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

相关推荐
暴力求解16 分钟前
Linux---进程池
linux·运维·服务器
嵌入小生00739 分钟前
ARM --- 基础知识汇总
linux·嵌入式·arm·指令集
IMPYLH1 小时前
Linux 的 du 命令
linux·运维·服务器
!chen1 小时前
[Linux][虚拟串口]0x03一个特殊的字节
linux·运维·服务器
林姜泽樾2 小时前
Linux入门第十七章,systemctl软件启动和软连接
linux·运维·服务器·centos
济6172 小时前
ARM Linux 驱动开发篇--- Linux 并发与竞争实验(自旋锁实现 LED 设备互斥访问)--- Ubuntu20.04自旋锁实验
linux·嵌入式·嵌入式linux驱动开发
艾莉丝努力练剑2 小时前
alarm系统调用的一次性原理揭秘
linux·运维·服务器·开发语言·网络·人工智能·学习
zly35002 小时前
只能同网段ping通,route add命令添加默认路由
linux·运维·服务器
isyangli_blog2 小时前
制作Linux Centos8 模板
linux·运维·服务器
A.A呐3 小时前
【Linux第十八章】线程
linux