Answers:
这是一个环境变量,因此通常在Terminal中通过
export DYLD_LIBRARY_PATH=someValue
man dyld
说:
DYLD_LIBRARY_PATH
这是用冒号分隔的包含库的目录列表。动态链接器先搜索这些目录,然后再搜索默认位置的库。它允许您测试现有库的新版本。
对于程序使用的每个库,动态链接器
DYLD_LIBRARY_PATH
依次在每个目录中查找它。如果仍然无法找到库,它就会搜索DYLD_FALLBACK_FRAMEWORK_PATH
并DYLD_FALLBACK_LIBRARY_PATH
反过来。使用
-L
选项otool(1)
。发现可执行文件链接到的框架和共享库。
您可能想要类似
export DYLD_LIBRARY_PATH=.:$DYLD_LIBRARY_PATH
在.
当前目录之前添加(当前目录)。在我未修改的OS X上,DYLD_LIBRARY_PATH
虽然没有当前值:
$ echo $DYLD_LIBRARY_PATH
$
根据您打算运行程序的方式,您需要对此进行不同的设置,例如在Xcode中(尽管我不知道在哪里)。
永远不要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
就这么简单。
DYLD_FALLBACK_FRAMEWORK_PATH
,则在这种情况下确实可以使用。这比更改库的内部路径容易得多,尤其是如果您需要随应用程序一起提供内置的dylib,并且无法预测它们最终的路径时,这一点就特别容易。
在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
在菜单中,单击“产品”->“编辑方案”->“参数”选项卡->添加“环境变量”->键:DYLD_LIBRARY_PATH值:/ Users / MyUserAccount / path / to / lib
将路径更改为您的用户帐户,并将完整路径更改为库文件夹。
您应该能够构建并运行。
DYLD_LIBRARY_PATH
也不为DYLD_FRAMEWORK_PATH
,因为它可能会阻止那些已加载的库查找系统提供的库。为了使它更好地工作,请改用FALLBACK
版本。该答案的更多信息:stackoverflow.com/a/3172515/43615