2013-07-19 1 views
1

Я пытаюсь скомпилировать примерный плагин, найденный в 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.

ответ

2

Вам нужно сообщить компоновщику, с которым следует ссылаться libs, с помощью TARGET_LINK_LIBRARIES. Вот что я использую в своем CMakeLists.txt.

SET(MAYA_PLUGIN_NAME "myCoolPlugin") 
SET(MAYA_DIRECTORY "D:/Program Files (x86)/Autodesk Maya2011") 
SET(MAYA_HEADERS_DIR "${MAYA_DIRECTORY}/include") 
SET(MAYA_LIBRARY_DIR "${MAYA_DIRECTORY}/lib") 

SET(SOURCE_FILES 
    myCoolPlugin.cpp 
) 

source_group("" FILES ${SOURCE_FILES}) 

INCLUDE_DIRECTORIES(${MAYA_HEADERS_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) 

SET_TARGET_PROPERTIES(${MAYA_PLUGIN_NAME} PROPERTIES LINK_FLAGS "/export:initializePlugin /export:uninitializePlugin") 
+0

Эй, спасибо за ответ, я попытался изменить ваш файл cmake, но все равно получаю те же ошибки. Я могу скомпилировать файл через визуальную студию, но не строить его, поэтому не работает компоновщик. Я только что протестировал исходный код с помощью MayaPluginWizard, и это сработало хорошо, я также попытался использовать VS10 в качестве генератора для cmake, без разницы. – Martinnj

+0

Хорошо, проверьте свойства проекта в VS, Linker-> Input-> Additional Dependencies. Он перечисляет майя-библиотеки (OpenMaya.lib и т. Д.)? –

+0

У меня есть следующие зависимости от окон: Foundation.lib; OpenMaya.lib; OpenMayaAnim.lib; OpenMayaUI.lib – Martinnj

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

  • Нет связанных вопросов^_^