gpt4 book ai didi

linux - 如何在 Linux rpath 中编码可执行位置?

转载 作者:IT王子 更新时间:2023-10-29 00:13:34 26 4
gpt4 key购买 nike

我有一个隐式加载多个 .so 库的可执行文件,它们都是我构建的。对于部署,或者至少是测试/调试,我希望将它们全部放在同一个目录中:

my_executable
libmylib1.so
libmylib2.so

为了让可执行文件隐式加载库,我想为可执行文件的目录设置一个 rpath (DT_RUNPATH)。对于 OS X,我会这样做:

clang -dynamiclib -o libmylib1.dylib -install_name @rpath/libmylib1.dylib src1.c src2.c    
clang -dynamiclib -o libmylib2.dylib -install_name @rpath/libmylib2.dylib src3.c src4.c
clang -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath,@loader_path/. main.c

请注意 @loader_path/. 在 OS X 中形成可执行文件的 rpath。对于 Linux,我最接近的是

gcc -dynamiclib -o libmylib1.so src1.c src2.c    
gcc -dynamiclib -o libmylib2.so src3.c src4.c
gcc -o my_executable -L. -llibmylib1.so -llibmylib2.so -Wl,-rpath=. main.c

这里的问题是,在 Linux 上,rpath 遵循当前工作目录,而不是可执行文件的目录。有什么方法可以在 Linux 上完成同样的事情吗?

最佳答案

您需要使用文字字符串 $ORIGIN 作为运行路径,动态加载程序会将其理解为可执行文件的位置。

关于linux - 如何在 Linux rpath 中编码可执行位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12399056/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com