language-agnostic - 可以在 Mac OS X 上使用 DYLD_LIBRARY_PATH 吗?还有,它的动态库搜索算法是什么?

标签 language-agnostic macos dynamic-linking dll

我读到一些文章不鼓励使用 DYLD_LIBRARY_PATH,因为动态库的路径应该使用 -install_name、@rpath 和 @loader_path 来固定。

就制作一个同时在 Linux 和 Mac OS X 上运行的程序而言,Mac OS X 的 DYLD_LIBRARY_PATH 与 Linux 的 LD_LIBRARY_PATH 完全相同。而且,我们可以共享(几乎)相同的没有 -install_name 和 @rpath 的 make 文件。

  • 可以在 Mac OS X 上使用 DYLD_LIBRARY_PATH 吗?
  • 当二进制文件找不到动态库时,Mac OS X 的动态库搜索算法是什么?当前目录 -> DYLD_LIBRARY_PATH 目录...?

最佳答案

正如您所注意到的,DYLD_LIBRARY_PATH行为类似于 LD_LIBRARY_PATH在其他 *nix 上。但是,您应该查看另一个环境变量,名为 DYLD_FALLBACK_LIBRARY_PATH .

一般来说,这些(在 osx 和 linux 上)仅建议用于开发用途,因为当您使用不具有相同符号表的库覆盖时,它们可能会导致符号查找错误。一个很好的例子是当您尝试使用自定义安装覆盖 VecLib(例如 blas lapack)的默认安装时。如果DYLD_LIBRARY_PATH,这将导致链接到系统VecLib的应用程序中出现符号未找到错误已设置,如果未设置,则相反(自定义应用程序中的符号查找错误)。这是由于系统 blas/lapack 不是 ATLAS 库的完整实现。

DYLD_FALLBACK_LIBRARY_PATH不会产生这些问题。

将库安装到非标准位置时,DYLD_FALLBACK_LIBRARY_PATH更加理智了。这将在默认路径中提供的库中查找符号,如果在那里找不到该符号,则回退到指定的路径。

好处是,此过程不会在针对默认库编译的应用程序中导致符号查找错误。

通常,当库安装到非标准位置时,应指定绝对路径,这可以消除动态查找的歧义。

关于language-agnostic - 可以在 Mac OS X 上使用 DYLD_LIBRARY_PATH 吗?还有,它的动态库搜索算法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3146274/

相关文章:

macos - Heroku CLI 错误 - "cli.Spinner is not a function"

c++ - 与共享动态库交叉编译

windows - 使用 DEF 文件而不是 LIB 文件链接到 DLL?

language-agnostic - 您什么时候在该领域使用过动态规划?

Java:更好的颜色选择算法

php - : Is this a good practice?异常(exception)

math - float 学有问题吗?

ios - 将 Xcode 5 降级到 Xcode 4.6 后仪器停止工作

macos - 服务 'nginx'无法构建:…只读文件系统

c++ - 如何减少默认的 C++ 内存消耗?