在Mac OS X的哪里设置DYLD_LIBRARY_PATH,这是一个好主意吗?


28

我正在尝试在Mac(OS X)上安装用C ++编写的求解器,以与用XCode编写的代码一起使用。

求解器文档说:

确保有“。” DYLD_LIBRARY_PATH为了你

  • 运行现成的可执行文件
  • 与libamg.dylib(和gfortran RTSlib)链接

我真的不明白这是什么意思。我需要在哪里更改什么?

我做了一些谷歌搜索,但是还没有遇到像我这样的新手那么简单的事情!如果有耐心的人不介意将我引导到在线资源,或者不给我有关如何以及在何处设置环境变量的摘要,我将不胜感激。

Answers:


20

这是一个环境变量,因此通常在Terminal中通过

export DYLD_LIBRARY_PATH=someValue

man dyld 说:

DYLD_LIBRARY_PATH

这是用冒号分隔的包含库的目录列表。动态链接器先搜索这些目录,然后再搜索默认位置的库。它允许您测试现有库的新版本。

对于程序使用的每个库,动态链接器DYLD_LIBRARY_PATH依次在每个目录中查找它。如果仍然无法找到库,它就会搜索 DYLD_FALLBACK_FRAMEWORK_PATHDYLD_FALLBACK_LIBRARY_PATH反过来。

使用-L选项otool(1)。发现可执行文件链接到的框架和共享库。


您可能想要类似

export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH

.当前目录之前添加(当前目录)。在我未修改的OS X上,DYLD_LIBRARY_PATH虽然没有当前值:

$ echo $DYLD_LIBRARY_PATH

$

根据您打算运行程序的方式,您需要对此进行不同的设置,例如在Xcode中(尽管我不知道在哪里)。


1
我同意@TVNshack,您通常不应设置DYLD_LIBRARY_PATH也不为DYLD_FRAMEWORK_PATH,因为它可能会阻止那些已加载的库查找系统提供的库。为了使它更好地工作,请改用FALLBACK版本。该答案的更多信息:stackoverflow.com/a/3172515/43615
SuperTempel

21

永远不要export DYLD_LIBRARY_PATH在您的系统上设置一个。

共享库路径可以使用otool -L和固定install_name_tool

例如,如果您编译Perl DBD-MySQL,您将无法使用它,因为链接器不知道您将MySQL安装在哪里。

># make
....


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)


#> install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib blib/arch/auto/DBD/mysql/mysql.bundle


># otool -L blib/arch/auto/DBD/mysql/mysql.bundle

blib/arch/auto/DBD/mysql/mysql.bundle:
        /usr/local/mysql/lib/libmysqlclient.18.dylib (compatibility version 18.0.0, current version 18.0.0)
        /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 125.2.11)



#> make test
...
Result: PASS

#> make install

就这么简单。


快速仅供参考:如果新路径的长度大于替换路径,则install_name_tool会自动失败。始终使用'otool -L'验证路径是否按预期更改。
user15685

假设我编译了一个依赖于另一个动态库的插件(基本上是一个动态库)。如何为其他用户提供插件及其依赖项?
罗伊

如果改为设置DYLD_FALLBACK_FRAMEWORK_PATH,则在这种情况下确实可以使用。这比更改库的内部路径容易得多,尤其是如果您需要随应用程序一起提供内置的dylib,并且无法预测它们最终的路径时,这一点就特别容易。
SuperTempel

7

在Xcode 4中,您可以将其添加到项目Scheme中,以避免此类错误:

dyld: Library not loaded: @loader_path/libLeap.dylib
  Referenced from: /Users/paulsolt/Library/Developer/Xcode/DerivedData/LeapTest-eqcxmzewheyjusgrcszyvlcxlgna/Build/Products/Debug/LeapTest
  Reason: image not found
  1. 在菜单中,单击“产品”->“编辑方案”->“参数”选项卡->添加“环境变量”->键:DYLD_LIBRARY_PATH值:/ Users / MyUserAccount / path / to / lib

  2. 将路径更改为您的用户帐户,并将完整路径更改为库文件夹。

  3. 您应该能够构建并运行。

在Xcode 4中设置DYLD_LIBRARY_PATH

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.