linux - 如何在编译中使用 -rpath 设置可执行文件在同一目录中搜索共享库

标签 linux compilation shared-libraries rpath

如何设置可执行文件在编译时在同一目录下搜索共享库, 我已经将可执行文件和相关的 .so 库放在同一目录中,而不是更改 LD_LIBRARY_PATH 或/etc/ld.so.conf, 是否可以将 -rpath 设置为一个变量,该变量是保存可执行文件的目录,并且该变量不是特定路径,它是可变的。

最佳答案

Is it possible to set -rpath as a variable

是的:您希望将 DT_RPATH 设置为 $ORIGIN,如下所示:

gcc main.c -Wl,-rpath='$ORIGIN' -lfoo -lbar

注意:您需要对 $ORIGIN 进行单引号以防止 shell 扩展它 -- RPATH 必须 包含 $ 符号。

另一种选择是像这样链接:

gcc main.c ./libfoo.so ./libbar.so

这仅在 libfoo.solibbar.so 没有设置了 DT_SONAME 时有效,并且通常是劣等解决方案。我只是在这里提到它是为了完整性。

关于linux - 如何在编译中使用 -rpath 设置可执行文件在同一目录中搜索共享库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554743/

相关文章:

c - 动态库加载 : easy way to figure out unresolved symbols runtime

linux - Linux i install4j 的平台特定变量

c++ - OpenCV Videocapture 抓取和检索

java - 使用 ANT 编译 JavaFX 代码

java - 为什么 Java 不公开基于 toString/hashCode/equals 的编译时反射?

c++ - Linux - 动态和静态加载时调用相同的函数

C - 外部汇编函数使用相同的输入返回不同的结果

python - 来自 Python 的 SSH 隧道连接速度太慢

具有返回类型的 Java 方法在没有返回语句的情况下编译

c++ - 共享库的 TX 文件扩展名?