我正在尝试运行 SFML 程序,但它无法加载库。我知道安装步骤建议:
>将Frameworks的内容复制到/Library/Frameworks. https://www.sfml-dev.org/tutorials/2.5/start-osx.php
但是,我想尽可能少地扰乱我的系统。我希望设置
DYLD_LIBRARY_PATH
是一个可行的解决方案。由于错误是:
dyld[51155]: Library not loaded: @rpath/sfml-audio.framework/Versions/2.5.1/sfml-audio
Referenced from: <...> /Users/jeffrey/workspace/SFML-2.5.1-macos-clang/examples/pong/pong
Reason: tried: '/System/Volumes/Preboot/Cryptexes/OS@rpath/sfml-audio.framework/Versions/2.5.1/sfml-audio' (no such file), '/Library/Frameworks/sfml-audio.framework/Versions/2.5.1/sfml-audio' (no such file), '/System/Library/Frameworks/sfml-audio.framework/Versions/2.5.1/sfml-audio' (no such file, not in dyld cache)
Abort trap: 6
我设置:
pong> echo $DYLD_LIBRARY_PATH
/Users/jeffrey/workspace/SFML-2.5.1-macos-clang/Frameworks/sfml-audio.framework/Versions/2.5.1/
看起来设置正确:
pong> ls `echo $DYLD_LIBRARY_PATH`
Resources sfml-audio
在尝试执行
./pong
告诉它实际使用变量时,我错过了一个步骤吗?或者我应该使用其他变量吗?
编辑: 使用
DYLD_FALLBACK_LIBRARY_PATH
不能解决问题。正如评论所暗示的那样,otool
可能会有用(尽管我不确定它的作用)
@rpath/sfml-audio.framework/Versions/2.5.1/sfml-audio (compatibility version 2.5.0, current version 2.5.1)
@rpath/sfml-graphics.framework/Versions/2.5.1/sfml-graphics (compatibility version 2.5.0, current version 2.5.1)
@rpath/sfml-window.framework/Versions/2.5.1/sfml-window (compatibility version 2.5.0, current version 2.5.1)
@rpath/sfml-system.framework/Versions/2.5.1/sfml-system (compatibility version 2.5.0, current version 2.5.1)
/usr/lib/libc++.1.dylib (compatibility version 1.0.0, current version 19.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0)```
设置
DYLD_LIBRARY_PATH
环境变量在大多数情况下应该有效,但在您的情况下,它似乎没有被动态链接器获取。一个可能的原因可能是 DYLD_LIBRARY_PATH
环境变量被其他环境变量或设置覆盖。您可以尝试设置 DYLD_LIBRARY_PATH
,而不是设置 DYLD_FALLBACK_LIBRARY_PATH
。此变量指定用于搜索在默认搜索路径中找不到的共享库的目录列表。这是一个如何设置DYLD_FALLBACK_LIBRARY_PATH
的例子:
export DYLD_FALLBACK_LIBRARY_PATH=/Users/jeffrey/workspace/SFML-2.5.1-macos-clang/Frameworks
这将后备库路径设置为 SFML 安装目录中的 Frameworks 目录。确保将
/Users/jeffrey/workspace/SFML-2.5.1-macos-clang
替换为 SFML 安装目录的实际路径。一旦你设置了DYLD_FALLBACK_LIBRARY_PATH
,尝试再次运行你的SFML程序。它现在应该能够在 Frameworks 目录中找到所需的共享库。