gcc - rpath 的正确用法(相对与绝对)

标签 gcc linker rpath

构建二进制文件或库时,指定rpath,即

-Wl,rpath,<path/to/lib>

告诉链接器在二进制文件运行时在哪里找到所需的库。

这里关于绝对路径和相对路径的 UNIX 哲学是什么?使用绝对路径是否更好,以便可以从任何地方找到该库?或者最好使其相对,以便复制整个目录或重命名更高级别的路径不会使二进制文件变得不可用?

更新

使用$ORIGIN通常是构建二进制文件的首选方法。对于库,我喜欢放入绝对路径,因为否则您将无法链接到该库。符号链接(symbolic link)会将$ORIGIN更改为指向链接的路径,而不是链接目标的路径。

最佳答案

rpath的情况下,使用相对路径是没有意义的,因为相对路径将相对于当前工作目录,而不是相对于二进制/库所在的目录成立。因此,在任何情况下,它都不适用于 $PATH 中找到的可执行文件或库。

相反,您可以使用$ORIGIN“特殊”路径来获得相对于可执行文件的路径
-Wl,-rpath,'$ORIGIN' -- 请注意,您需要在它周围加上引号,以避免 shell 将其解释为变量,如果您尝试在 Makefile 中执行此操作,则需要 $$ 以避免 make 解释$ 也是如此。

关于gcc - rpath 的正确用法(相对与绝对),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38058041/

相关文章:

gcc - gcc可以为不同的CPU交叉编译吗?

gcc - 使用 MinGW64 gcc 构建 GLFW -- 入口符号警告和链接器错误

c++ - 共享库 RPATH 和二进制 RPATH 优先级

python - 在 CentOS 中安装 python 2.6

C++ 带有运行路径的辅助依赖解析

c++ - 将类作为函数参数传递时,C++ “is not a type”错误

Char * 共享同一内存

C++ Dll 链接 Curl

c++ - 如何使两个用不同语言编写的程序链接起来?

c++ - 链接使用 i686-w64-mingw32 编译的 POCO 库时出错