-
Notifications
You must be signed in to change notification settings - Fork 0
Linux compile link
- 相关文档查看: man ld.so; man ld
- 操作: patchelf
- 相关变量:
- ORIGIN: gcc -Wl,-rpath, '$ORIGIN/../lib' main.c
egORIGIN的作用是将rpath的搜索路径设置为可执行文件 运行时相对路径, 类似于bash的 cur_dir=`dirname $0` cd ${cur_dir}
$ gcc main.c && patchelf --print-needed a.out
libc.so.6
$ patchelf --add-needed libhello.so a.out
$ patchelf --print-needed a.out
libhello.so
libc.so.6
$ ldd -r a.out
linux-vdso.so.1 => (0x00007ffdd8372000)
/$LIB/libonion.so => /lib64/libonion.so (0x00007f15dd624000)
libhello.so => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f15dd147000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f15dcf43000)
/lib64/ld-linux-x86-64.so.2 (0x00007f15dd50b000)
$ mkdir lib
$ touch lib/libhello.so
$ ldd -r a.out
linux-vdso.so.1 => (0x00007ffd95da5000)
/$LIB/libonion.so => /lib64/libonion.so (0x00007f37f2681000)
libhello.so => not found
libc.so.6 => /lib64/libc.so.6 (0x00007f37f21a4000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f37f1fa0000)
/lib64/ld-linux-x86-64.so.2 (0x00007f37f2568000)
$ patchelf --set-rpath '$ORIGIN/lib' a.out
$ patchelf --print-rpath a.out
gcc -Wl,-rpath,'$ORIGIN/lib' main.c