构建二进制文件或库时,指定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/