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

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

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

.或者$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 ${RPATH} libopencv_video.so
  • 办法2
chrpath -r ${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/pan/./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)

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

相关推荐

  1. 编译so修改rpath当前路径

    2024-01-23 13:22:02       57 阅读
  2. Ubuntu 修改当前用户名称

    2024-01-23 13:22:02       58 阅读
  3. Android Studio项目加载预编so

    2024-01-23 13:22:02       43 阅读
  4. linux c++获取当前程序运行路径

    2024-01-23 13:22:02       34 阅读
  5. 查看ubuntu当前路径剩余存储空间

    2024-01-23 13:22:02       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-23 13:22:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-23 13:22:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-23 13:22:02       87 阅读
  4. Python语言-面向对象

    2024-01-23 13:22:02       96 阅读

热门阅读

  1. Linux Wine安装微信记录

    2024-01-23 13:22:02       61 阅读
  2. 定制 APP 开发:满足独特业务需求的最佳选择

    2024-01-23 13:22:02       57 阅读
  3. VC++创建线程学习1

    2024-01-23 13:22:02       57 阅读
  4. Fitten Code:VSCode插件市场的璀璨之星

    2024-01-23 13:22:02       56 阅读
  5. linux命令总结之seq命令

    2024-01-23 13:22:02       55 阅读
  6. 122 解二叉树的右视图的两种方式

    2024-01-23 13:22:02       54 阅读
  7. c++学习理解之路——基类指针指向子类

    2024-01-23 13:22:02       54 阅读
  8. GaussDB如何创建和管理序列、定时任务

    2024-01-23 13:22:02       48 阅读
  9. LeeCode 3. 无重复字符的最长子串

    2024-01-23 13:22:02       53 阅读
  10. dnf:找不到命令

    2024-01-23 13:22:02       57 阅读