编译时设置共享库前缀
Setting shared libraries prefix when compiling
我正在尝试编译一个程序,我需要在共享库路径上设置一个前缀路径,我尝试使用 -Wl,-rpath -Wl,-dynamic-linker
,我从 ldd
得到的是:
linux-vdso.so.1 => (0x00007fff75336000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f19d55b8000)
/pathtolib/lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x000055d3d67e1000)
但我期望得到的是:
linux-vdso.so.1 => (0x00007fff75336000)
libc.so.6 => /pathtolib/lib/x86_64-linux-gnu/libc.so.6 (0x00007f19d55b8000)
/pathtolib/lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x000055d3d67e1000)
我真的需要设置它并强制程序对所有共享库使用非默认路径 (/pathtolib)。
这是我用来编译的命令:
gcc list/list.c -o bin/list -Wl,-rpath,/pathtolib -Wl,--dynamic-linker,/pathtolib/lib64/ld-linux-x86-64.so.2
我做错了什么?!! :|
-rpath
选项没有为搜索路径中的个别目录指定前缀;相反,它指定了一个包含 路径 的 colon-delimited 列表。动态 linker 首先搜索这些目录,但如果需要,它会继续搜索路径的其余部分。因此,如果您希望动态 linker 将 libc.so.6
解析为 /pathtolib/lib/x86_64-linux-gnu/libc.so.6
,那么您必须在 rpath
中指定的不是 /pathtolib
,而是 /pathtolib/lib/x86_64-linux-gnu
.
我不知道 link 选项或 ELF header 字段会指示动态 linker 执行您似乎要求的操作:修改标准库通过为每个元素添加前缀来搜索路径。如果你想做那样的事情,那么你可能需要提供你自己的动态 linker.
或者,也许您想构建和使用 chroot 环境而不是弄乱 rpaths。这需要相当多的工作来设置,但它的效果是允许您使用一整套不同的库。
我正在尝试编译一个程序,我需要在共享库路径上设置一个前缀路径,我尝试使用 -Wl,-rpath -Wl,-dynamic-linker
,我从 ldd
得到的是:
linux-vdso.so.1 => (0x00007fff75336000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f19d55b8000)
/pathtolib/lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x000055d3d67e1000)
但我期望得到的是:
linux-vdso.so.1 => (0x00007fff75336000)
libc.so.6 => /pathtolib/lib/x86_64-linux-gnu/libc.so.6 (0x00007f19d55b8000)
/pathtolib/lib64/ld-linux-x86-64.so.2 => /lib64/ld-linux-x86-64.so.2 (0x000055d3d67e1000)
我真的需要设置它并强制程序对所有共享库使用非默认路径 (/pathtolib)。
这是我用来编译的命令:
gcc list/list.c -o bin/list -Wl,-rpath,/pathtolib -Wl,--dynamic-linker,/pathtolib/lib64/ld-linux-x86-64.so.2
我做错了什么?!! :|
-rpath
选项没有为搜索路径中的个别目录指定前缀;相反,它指定了一个包含 路径 的 colon-delimited 列表。动态 linker 首先搜索这些目录,但如果需要,它会继续搜索路径的其余部分。因此,如果您希望动态 linker 将 libc.so.6
解析为 /pathtolib/lib/x86_64-linux-gnu/libc.so.6
,那么您必须在 rpath
中指定的不是 /pathtolib
,而是 /pathtolib/lib/x86_64-linux-gnu
.
我不知道 link 选项或 ELF header 字段会指示动态 linker 执行您似乎要求的操作:修改标准库通过为每个元素添加前缀来搜索路径。如果你想做那样的事情,那么你可能需要提供你自己的动态 linker.
或者,也许您想构建和使用 chroot 环境而不是弄乱 rpaths。这需要相当多的工作来设置,但它的效果是允许您使用一整套不同的库。