在Mac OS X上链接库文件的默认搜索目录是什么?

9
我在Mac OS X上使用CMake构建了Google Test,得到了两个共享库:libgtest.dyliblibgtest_main.dylib。现在我需要安装它们。我知道Linux有一些默认的搜索目录,如/usr/lib/usr/local/lib等。但我不熟悉Mac OS X,不知道把这些库放在哪里。
Mac OS X Directory Structure中,我发现有三个库目录:~/Library/Library/usr/lib。我尝试将gtest库分别放入这些目录中,发现只有/usr/lib起作用。
我想知道的是,是否像Linux和Windows一样,在Mac OS X上有关于默认搜索目录的规则。

我想知道为什么单词“libgtest_main.dylib”没有斜体效果,因为我已经在它前后输入了“*”。 - Yantao Xie
我投了这个问题的赞成票。因为这是一个常常被错误处理的事情,这让我很苦恼。请看下面aponomarenko的回答中我的评论。 - Angel O'Sphere
2个回答

10

请查看dyld链接器使用的环境变量的默认值:

DYLD_FALLBACK_LIBRARY_PATH
   ...
默认情况下,它设置为 $(HOME)/lib:/usr/local/lib:/lib:/usr/lib

这篇关于“在Mac OS X上部署应用程序”的文章和其他关于“Mac OS X安装程序”的文章也可能有所帮助。


1
你肯定不会将库部署在像/lib等“非用户目录”中。通常,Mac应用程序被捆绑到一个AppName.app目录中。没有什么阻止你把你的库放进去;D 这两个链接都很好。 - Angel O'Sphere

1
除了 @linuxbuild 的回答外,我还发现来自苹果开发者档案的文章 "Dynamic Library Programming Topics > The Library Search Process" 很有帮助。它解释了对于 libname.dylibpath/to/libname.dylib,搜索顺序是不同的。
引用部分:

当库名是一个文件名(不是带有目录名称的路径),动态加载器按以下顺序搜索该库:

  1. $LD_LIBRARY_PATH
  2. $DYLD_LIBRARY_PATH
  3. 进程的工作目录
  4. $DYLD_FALLBACK_LIBRARY_PATH

当库名包含至少一个目录名(相对或完全限定的路径名)时,动态加载器按以下顺序搜索该库:

  1. 使用文件名在 $DYLD_LIBRARY_PATH 中搜索
  2. 给定的路径名
  3. 使用文件名在 $DYLD_FALLBACK_LIBRARY_PATH 中搜索

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接