首先回顾一下:
我不知道我在做什么。
谎言,我知道我在做什么。我是一名网络开发人员,因此查看代码并非全是胡言乱语,但尝试使用Xcode对我来说是一本新书。无论如何,我在Windows上使用SFML设计了一个用C ++编译的游戏,现在我们正试图将它带到OS X(我是Mac中唯一一个拥有Mac的人)。使用Xcode 4.6.1和SFML 2.0我一直试图让这个该死的应用程序构建,到目前为止它只是头痛。让这个东西工作的当前状态并不是那么糟糕,它最终构建没有错误,但构建停止并显示:
dyld: Library not loaded: @executable_path/../Frameworks/freetype.framework/
Versions/A/freetype
Referenced from: /Users/Eric/Library/Developer/Xcode/DerivedData/
Test-haconqzbewevbwgukppsacykkpml/Build/Products/Debug/Test.app/
Contents/Frameworks/sfml-graphics.framework/Versions/2.0.0/sfml-graphics
Reason: Incompatible library version: sfml-graphics requires version 17.0.0 or
later, but freetype provides version 16.0.0
我只是不明白这个错误。我有FreeType的最新版本。考虑到FreeType是2.4.11,我甚至不确定该版本号是指什么。我似乎无法在任何其他地方找到这个错误,任何想法?
答案 0 :(得分:4)
错误消息中提到的版本号是指库的兼容版本。这是在构建时将其烘焙到给定动态库的版本号。当另一个二进制文件链接到该库时,兼容性版本将被复制到LC_LOAD_DYLIB
load命令,该命令在运行时告诉dyld
需要加载哪些动态库。当dyld
加载库时,会检查兼容性版本,如果程序的版本大于库的版本,那就是错误。
当您运行otool -L freetype.framework/Versions/A/freetype
时,您会看到它将其兼容性版本报告为16.0.0
。如果您在sfml-graphics.framework/Versions/2.0.0/sfml-graphics
上运行,则会看到它为17.0.0
报告freetype.framework
的兼容版本。所以你遇到了上面描述的错误情况。
这种错误的最常见原因是针对旧版本的框架运行应用程序而不是构建它的版本,以及任何链接的框架。请注意,在这种意义上,“较旧”是指兼容性版本,而不是与框架关联的任何其他版本号(例如,营销版本)。
如果不知道所涉及的两个框架的来源(例如,如果你自己构建它们,或者你从哪里获得二进制文件),那么你出错的地方并不完全明显。但是我会注意到SFML git存储库似乎有a version of freetype.framework
和相应的兼容版本(17.0.0
),所以如果你使用的是SFML人员提供的sfml-graphics.framework
二进制文件,那么拿起他们的FreeType框架可能是你的解决方案。