【问题标题】:Nominate library directory at compilation编译时指定库目录
【发布时间】:2012-05-10 02:19:02
【问题描述】:

我能够使用

生成可执行文件

gcc myexec -o obj1.obj -o obj2.obj ...和链接xxx.dylib

我将 myexec 部署到另一台机器上。当然,myexec 需要 xxx.dylib 才能运行。

为此,我使用 xxx.dylib 和 myexec 创建 myInstallFolder

在部署时,我可以通过将 DYLD_LIBRARY_PATH 指向 myInstallFolder 来让 myexec 选择 xxx.dylib。

但是,我想避免使用 DYLD_LIBRARY_PATH。

在编译/链接时应进行哪些更改以使 myexec 从 myInstallFolder 中获取?

~莱德

【问题讨论】:

  • 如果您希望经常使用 gcc,1. 阅读 gmake 及其相关的 makefile,2. 将您发布的标签之一更改为 gmake。祝你好运。

标签: linux macos unix installation gnu-make


【解决方案1】:

您可以指示链接器将路径写入二进制文件中,加载器将使用该路径来加载 .so 文件:

-Wl,-R<path to myInstallFolder>

例如

-Wl,-R/usr/local/mybin/lib

【讨论】:

  • 我试过 Wl, -L/usr/local/lib 是徒劳的。我将尝试使用-R。但是,当我需要将 myexec 部署到 100 个系统时,我如何指定这样的目录来保证存在?
  • @user1385988 要知道特定目录存在,请检查它并在不存在时创建它。这通常使用某种安装脚本来完成。如果您要打包二进制文件(.deb、.rpm),您需要了解如何在这种情况下执行此操作。
  • @user1385988 为了避免混淆:如果您将库放在/usr/local/lib 中,则不需要LD_LIBRARY_PATH 和其他技巧,例如-R。此路径通常是查找 .so 文件的预定义位置的一部分。但是你可能需要在将你的库放在那里之后运行ldconfig 让加载器看到它。
猜你喜欢
  • 2019-11-27
  • 1970-01-01
  • 2014-11-16
  • 2011-02-07
  • 1970-01-01
  • 2012-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多