2013-03-27 3 views
4

Первая история:Ошибка 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. Кажется, я не могу найти эту ошибку где-нибудь еще, какие-нибудь идеи?

ответ

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.0 для freetype.framework. Таким образом, вы делаете ошибку, описанную выше.

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

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

+0

не знаю, что это было для других, но ссылка на sfml включен freetype вместо моей системы freetype была решением для меня 'target_link_libraries ($ {EXECUTABLE_NAME}" $ {CMAKE_SOURCE_DIR}/deps/SFML/extlibs/libs -osx/Frameworks/freetype.framework/Версии/A/freetype ")' – slf

+1

Было ли это когда-либо разрешено? Я столкнулся с аналогичной проблемой прямо сейчас, используя SFML на моем macbook. Я разработал эту библиотеку на windows/ubuntu без ошибок. @slf, где вы это добавили? Я компилирую из командной строки –

+0

Просто увидел, что это несколько лет: | –

Смежные вопросы