Связь с фреймворком с помощью cmake в Mac OS X
Я пытаюсь связать программу с Ogre и несколькими другими библиотеками на OS X, используя cmake, но я продолжаю получать эту ошибку:
ld: warning: directory '/Library/Frameworks/SDL.framework/Debug' following -L not found
ld: warning: directory '-framework Cocoa/Debug' following -L not found
ld: warning: directory '-framework Cocoa' following -L not found
ld: warning: directory '/System/Library/Frameworks/OpenAL.framework/Debug' following -L not found
ld: warning: directory '/Library/Frameworks/Ogre.framework/Debug' following -L not found
ld: warning: directory '/opt/local/lib/libogg.dylib/Debug' following -L not found
ld: warning: path '/opt/local/lib/libogg.dylib' following -L not a directory
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/ogre/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/ogre' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/openal/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/openal' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/oggvorbis/Debug' following -L not found
ld: warning: directory '/Users/hydrowolfy/Documents/newphysgame/physgame/physgameengine/data/macosx/oggvorbis' following -L not found
ld: library not found for -lOgreMain
collect2: ld returned 1 exit status
Command /Developer/usr/bin/g++-4.2 failed with exit code 1
Те же файлы cmake работают на Windows и Linux. Я пытаюсь создать ссылку на фреймворк ogre 1.7.2, который я получил из SDK на сайте ogre. Я думаю, что это проблема связывания, но не проблема людоедов. Связывание с фреймворками с помощью cmake не так интуитивно понятно, как я надеялся. Любые идеи о том, как это исправить?
1 ответ
Во-первых, вы должны отметить, что ${APPLE}
"не означает, что система Mac OS X, только то, что APPLE #defined определен в заголовочных файлах C/C++". использование IF(${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
проверить на OS X.
У меня нет вашей среды сборки, чтобы протестировать следующие предложения, но попробуйте:
Строки 309 и 321 имеют опечатку. Так должно быть "${OGRE_INCLUDE_DIR}"
(не ${OGRE_INCLUDE_DIRS}
).
В строке 327 ${SDL_LIBRARY}
, ${OPENAL_LIBRARY}
, а также ${OGG_LIBRARY}
пути к файлам библиотеки, когда они должны быть путями к каталогам этих библиотек. link_directories
сообщает компоновщику, какие каталоги содержат библиотеки, которые вы указали в target_link_libraries
,
Кроме OGRE, строка 327 указывает библиотеки (SDL, AL и OGG), чьи FindXXX.cmake
не определяет _LIB_DIR
переменная (или эквивалент, который указывает каталог, содержащий библиотеку). Итак, эта строка должна быть
link_directories("${OGRE_LIB_DIR}")
Кроме того, строка 336 не является правильным синтаксисом. target_link_libraries
принимает в качестве первого аргумента цель (которая в данном случае должна быть библиотекой PhysGame), но вы передали ей путь к каталогу библиотеки Ogre. Поскольку вы не можете вызвать эту команду, пока не определите цель, вам придется отложить ее до строки 386.
Измените строку 386 с:
target_link_libraries( ${PROJECT_NAME} OgreMain ${Bullet_LibraryNames} cAudio SDL )
чтобы:
target_link_libraries(
${PROJECT_NAME}
"${OGRE_LIBRARIES}"
${Bullet_LibraryNames}
"${OPENAL_LIBRARY}"
"${SDL_LIBRARY}"
)
Вы также можете быть заинтересованы в: http://www.ogre3d.org/forums/viewtopic.php?f=1&t=58610&start=0