Я пытаюсь скомпилировать примерный плагин, найденный в Maya API, используя cmake для создания проекта Visual Studio 2012. Однако при компиляции библиотек, поставляемых с Maya, существует ряд проблем. Первая проблема была библиотека пытается компенсировать некоторую старую отсутствующую реализацию BOOL, это было решено путем добавления определения препроцессораПлагин майя компилирует проблемы с cmake и VS2012
add_definitions(-D _BOOL)
Для файла CMake.
Следующая ошибка из их библиотеки является проблемой, где он пытается Acces зОго :: ostream, но не может найти его в «Std», это решается с помощью другого определения в CMake:
add_definitions(-D REQUIRE_IOSTREAM)
Этого приводит к окончательной ошибке, с которой я не смог пройти, у меня есть как в Google, так и в браузере, просмотренный в стеке и посмотрел в образце VSproject файлы, которые поставляются с майей, неспособные решить проблему. Ошибки (18 всего) происходит от линкера, и все неразрешенные внешние символы, например, сообщение об ошибке:
Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MStatus::MStatus(enum MStatus::MStatusCode)" ([email protected]@[email protected]@[email protected]@Z) referenced in function "public: virtual class MStatus __thiscall hello::doIt(class MArgList const &)" ([email protected]@@[email protected]@[email protected]@@Z) C:\path\mayacmake_sample\helloworld.obj Sample_helloworld
Редактировать: Использование модифицированного cmakelist от Andreas не дали каких-либо различий: Эй, спасибо за ответ, но я все еще получаю много ошибок с inresolved внешнеположенности:
Error 1 error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MStatus::MStatus(enum MStatus::MStatusCode)" ([email protected]@[email protected]@[email protected]@Z) referenced in function "public: virtual class MStatus __thiscall hello::doIt(class MArgList const &)" ([email protected]@@[email protected]@[email protected]@@Z) D:\mayacmake_sample\helloworld.obj Maya_Sample_Plugin
Error 13 error LNK2001: unresolved external symbol "public: virtual bool __thiscall MPxCommand::hasSyntax(void)const " ([email protected]@@UBE_NXZ) D:\mayacmake_sample\helloworld.obj Maya_Sample_Plugin
Я вырезал другие ошибки, как они выглядят так же, как выше двух. я удостоверился, чтобы изменить пути в файле CMake, чтобы соответствовать моей установки, теперь он выглядит следующим образом:
cmake_minimum_required (VERSION 2.6)
SET(MAYA_PLUGIN_NAME "Maya_Sample_Plugin")
SET(MAYA_DIRECTORY "C:/Program Files/Autodesk/Maya2013")
SET(MAYA_HEADERS_DIR "${MAYA_DIRECTORY}/include")
SET(MAYA_LIBRARY_DIR "${MAYA_DIRECTORY}/lib")
SET(SOURCE_FILES
helloworld.cpp
)
source_group("" FILES ${SOURCE_FILES})
INCLUDE_DIRECTORIES(
${MAYA_HEADERS_DIR}
${Boost_INCLUDE_DIR}
)
LINK_DIRECTORIES(
${MAYA_LIBRARY_DIR}
)
SET(LIBRARIES
Foundation.lib
OpenMaya.lib
OpenMayaAnim.lib
OpenMayaUI.lib
)
SET(MAYA_DEFINITIONS _AFXDLL _MBCS NT_PLUGIN REQUIRE_IOSTREAM _BOOL)
ADD_LIBRARY(${MAYA_PLUGIN_NAME} SHARED ${SOURCE_FILES})
TARGET_LINK_LIBRARIES(${MAYA_PLUGIN_NAME} ${LIBRARIES})
SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES COMPILE_DEFINITIONS "${MAYA_DEFINITIONS}")
SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES OUTPUT_NAME "${MAYA_PLUGIN_NAME}")
SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES SUFFIX ".mll")
SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES CLEAN_DIRECT_OUTPUT 1)
Любая помощь в этом вопросе является appriciated.
Эй, спасибо за ответ, я попытался изменить ваш файл cmake, но все равно получаю те же ошибки. Я могу скомпилировать файл через визуальную студию, но не строить его, поэтому не работает компоновщик. Я только что протестировал исходный код с помощью MayaPluginWizard, и это сработало хорошо, я также попытался использовать VS10 в качестве генератора для cmake, без разницы. – Martinnj
Хорошо, проверьте свойства проекта в VS, Linker-> Input-> Additional Dependencies. Он перечисляет майя-библиотеки (OpenMaya.lib и т. Д.)? –
У меня есть следующие зависимости от окон: Foundation.lib; OpenMaya.lib; OpenMayaAnim.lib; OpenMayaUI.lib – Martinnj