Ошибка FreeType при сборке в XCode

Сначала немного предыстории:

Я не знаю, что я делаю.

Это ложь, я немного знаю, что делаю. Я веб-разработчик, поэтому смотреть на код — это не тарабарщина, но попытка использовать Xcode — это новая книга для меня. Как бы то ни было, я разработал игру, которая была скомпилирована на C++ с использованием SFML для Windows, и теперь мы пытаемся перенести ее на 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. Я тоже нигде не могу найти эту ошибку, есть идеи?


person Staghouse    schedule 27.03.2013    source источник


Ответы (1)


Номера версий, указанные в сообщении об ошибке, относятся к совместимой версии библиотеки. Это номер версии, встроенный в данную динамическую библиотеку во время ее сборки. Когда с этой библиотекой связывается другой двоичный файл, версия совместимости копируется в команду загрузки 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.0 для freetype.framework. Итак, вы сталкиваетесь с ошибкой, описанной выше.

Наиболее распространенной причиной такой ошибки является запуск вашего приложения в более старой версии фреймворка, чем версия, для которой вы его создали, и любые связанные фреймворки. Обратите внимание, что «более старая» в этом смысле относится к версии совместимости, а не к любому другому номеру версии, связанному с платформой (например, маркетинговая версия).

Не зная происхождения двух вовлеченных фреймворков (например, если вы создали их самостоятельно или откуда вы взяли двоичные файлы), не совсем очевидно, где вы ошиблись. Однако замечу, что в репозитории SFML git есть версия freetype.framework с соответствующей версией совместимости (17.0.0), поэтому, если вы используете двоичный файл sfml-graphics.framework, предоставленный ребятами из SFML, тогда вам может подойти их фреймворк FreeType.

person bdash    schedule 27.03.2013
comment
не знаю, что это было для других, но ссылка на sfml, включенный в freetype вместо моего системного freetype, была решением для меня target_link_libraries(${EXECUTABLE_NAME} "${CMAKE_SOURCE_DIR}/deps/SFML/extlibs/libs-osx/Frameworks/freetype.framework/Versions/A/freetype") - person slf; 10.06.2015
comment
Было ли это когда-нибудь решено? Я сталкиваюсь с аналогичной проблемой прямо сейчас, используя SFML на своем macbook. Я разработал эту библиотеку для Windows/Ubuntu без ошибок. @slf, где ты это добавил? Я компилирую из командной строки - person wdfc; 04.05.2017
comment
Только что увидел, что этому несколько лет :| - person wdfc; 04.05.2017