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

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

相关推荐
子琦啊17 小时前
【算法复习】字符串 | 两个底层直觉,吃透高频题
linux·运维·算法
AOwhisky18 小时前
Kubernetes 学习笔记:集群管理、命名空间与 Pod 基础
linux·运维·笔记·学习·云原生·kubernetes
小龙在慢慢变强..19 小时前
目录结构(FHS 标准)
linux·运维·服务器
2035去旅行19 小时前
嵌入式开发,如何选择C标准库
linux·arm开发
刘延林.19 小时前
win11系统下通过 WSL2 安装Ubuntu 24.04 使用RTX 5080 GPU
linux·运维·ubuntu
CodeOfCC20 小时前
Linux 嵌入式arm64安装openclaw
linux·运维·服务器
宵时待雨21 小时前
linux笔记归纳3:linux开发工具
linux·运维·笔记
magrich21 小时前
安装NoMachine并解决无外接显示器桌面黑屏
linux·运维·服务器
fish_xk21 小时前
Linus基础指令
linux·服务器
宁波阿成1 天前
在ubuntu22.04源码级安装sub2api
linux·运维·ubuntu·ai·api·token·中转站