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

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

相关推荐
Ruiery12 小时前
Linux 6.6内核内存管理深度解析(十六):mmap — 用户态“申请内存“的真相
linux·运维·服务器
欧米欧12 小时前
Linux系统篇(七),环境变量的底层溯源,核心获取机制与安全应用
linux·运维·服务器
Ruiery12 小时前
Linux 6.6内核内存管理深度解析(十八):KASLR 内核地址空间随机化
linux·运维·服务器·安全
qetfw13 小时前
UOS MariaDB 数据库:安装、最小权限与备份验证
linux·数据库·mariadb·uos
逆风的蚂蚁15 小时前
linux服务器性能调整怎么落地?我把 CPU 调度、I/O 优先级和内核参数这几个旋钮都拧了一遍
linux·运维·服务器
沫璃染墨19 小时前
从零入门计算机网络系列(十一):HTTP协议进阶——从重定向原理到GET/POST与Fiddler抓包
linux·服务器·开发语言·网络·c++·tcp/ip·html
AI_Lab0120 小时前
宝塔用了两年,有没有必要换成轻量方案?
linux·运维·服务器
by2099920 小时前
Linux GDB 调试与 CGDB 使用
linux·运维·服务器·经验分享
星恒随风21 小时前
Linux网络编程:应用层协议究竟是什么?从网络计算器到TCP Socket抽象基类完整实现
linux·网络·笔记·tcp/ip
feng_you_ying_li1 天前
linux之网络层
linux·运维·网络