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

Ant*_*Ant 36 mac environment-variables osx-snow-leopard

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

求解器文档是这样说的:

一定要有“.” 在你DYLD_LIBRARY_PATH为了

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

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

我已经做了一些谷歌搜索,但没有遇到任何对我这样的新手来说足够简单的东西!如果有任何耐心的人不介意将我引导到在线资源或向我提供如何以及在何处设置环境变量的 ab-cs,我将非常感激。

Dan*_*eck 26

它是一个环境变量,因此通常在终端中设置

export DYLD_LIBRARY_PATH=someValue
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

.(当前目录)添加到搜索的位置列表中。在我未修改的 OS X 上,DYLD_LIBRARY_PATH虽然没有当前值:

$ echo $DYLD_LIBRARY_PATH

$
Run Code Online (Sandbox Code Playgroud)

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

  • 我同意@TVNshack 你通常*不*设置`DYLD_LIBRARY_PATH`或`DYLD_FRAMEWORK_PATH`,因为它可能会阻止那些加载的库找到系统提供的库。为了更好地工作,请改用`FALLBACK` 版本。此答案中的更多信息:http://stackoverflow.com/a/3172515/43615 (2认同)

TVN*_*ack 25

永远不要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
Run Code Online (Sandbox Code Playgroud)

就这么简单。


小智 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
Run Code Online (Sandbox Code Playgroud)
  1. 在菜单中点击“产品”->“编辑方案”->“参数”选项卡->添加“环境变量”->键:DYLD_LIBRARY_PATH 值:/Users/MyUserAccount/path/to/lib

  2. 更改您的用户帐户的路径和库文件夹的完整路径。

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

在 Xcode 4 中设置 DYLD_LIBRARY_PATH