在XCode中构建时出现FreeType错误

FreeType error when building in XCode

本文关键字:FreeType 错误 XCode 构建      更新时间:2023-10-16

先讲一些背景故事:

我不知道我在做什么。

那是骗人的,我知道我在做什么。我是一名web开发人员,所以看代码并不全是胡言乱语,但尝试使用Xcode对我来说是一本新书。无论如何,我设计了一个游戏,在Windows上使用SFML用c++编译,现在我们正试图把它带到OS X(我是团队中唯一一个有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,我甚至不确定这个版本号指的是什么。我似乎在其他地方也找不到这个错误,有什么想法吗?

错误消息中提到的版本号是指库的兼容性版本。这是在构建给定动态库时嵌入的版本号。当另一个二进制文件链接到该库时,兼容性版本被复制到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.0freetype.framework的兼容版本。所以你遇到了上面描述的错误情况。

出现这种错误的最常见原因是,应用程序运行在比构建它的版本更旧的框架上,以及任何链接的框架上。请注意,这里的"旧"指的是兼容版本,而不是与框架相关的任何其他版本号(例如,营销版本)。

如果不知道所涉及的两个框架的起源(例如,如果您自己构建它们,或者您从哪里获得二进制文件),则不完全清楚您哪里出错了。然而,我要注意的是,SFML git存储库似乎有一个freetype.framework版本与适当的兼容性版本(17.0.0),所以如果你使用的是SFML人员提供的sfml-graphics.framework二进制文件,那么选择他们的FreeType框架可能是你的解决方案。