4

首先是一些背景故事:

我不知道我在做什么。

那是谎言,我知道我在做什么。我是一名 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,我什至不确定该版本号指的是什么。我似乎在其他任何地方也找不到这个错误,有什么想法吗?

4

1 回答 1

4

错误消息中提到的版本号是指库的兼容版本。这是一个版本号,它在构建时被嵌入到给定的动态库中。当另一个二进制文件链接到该库时,兼容性版本被复制到LC_LOAD_DYLIB加载命令中,该命令在运行时告知dyld需要加载哪些动态库。加载库时dyld,会检查兼容性版本,如果程序的版本高于库的版本,则为错误。

运行时,otool -L freetype.framework/Versions/A/freetype您会看到它报告其兼容版本为16.0.0. 如果你在上面运行它,sfml-graphics.framework/Versions/2.0.0/sfml-graphics你会看到它报告了17.0.0for的兼容版本freetype.framework。因此,您遇到了上述错误情况。

此类错误的最常见原因是针对旧版本的框架运行您的应用程序,而不是您构建它的版本,以及任何链接的框架。请注意,这个意义上的“旧”指的是兼容性版本,而不是与框架相关的任何其他版本号(例如,营销版本)。

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

于 2013-03-27T07:01:31.557 回答