【发布时间】:2015-05-09 19:13:32
【问题描述】:
我想在我的可执行文件中硬编码库的路径,在 Linux 中。在 OS X 上,这是通过在构建库时在 -o 参数之后提供完整路径来实现的。例如,我在 OS X 上构建了一个这样的库:
cc foo.c --shared -o /home/sander/libfoo.so
当我构建一个名为“bar”的可执行文件并与该库链接时,我在可执行文件上使用 otool -L,我得到以下输出:
bar:
/home/sander/libfoo.so (compatibility version 0.0.0, current version 0.0.0)
我现在可以从任何地方运行这个可执行文件,而且它总是能够找到库。
我正在寻找具有 gcc 的 Linux 上的等效功能。我宁愿不使用 rpath,因为它不会链接到特定的库 + 路径。
【问题讨论】:
-
有什么理由不能只静态链接?如果您担心物品被移动,那似乎是更安全的选择。
-
我无法静态链接。此功能是包管理系统的一部分,我必须能够更新单个包。我不太关心被移动的图书馆。更重要的是,我可以从系统上的任何位置找到这些库。
标签: c linux gcc shared-libraries dynamic-linking