Проблемы с компиляцией плагина Maya с помощью cmake и VS2012

Я пытаюсь скомпилировать пример плагина, найденный на Maya API использование cmake для создания проекта Visual Studio 2012. Однако при компиляции библиотек, поставляемых с Maya, возникает ряд проблем. Первая проблема заключалась в том, что библиотека пыталась компенсировать некоторую старую отсутствующую реализацию bool, это было решено добавлением определения препроцессора.

add_definitions(-D _BOOL)

К файлу cmake.

Следующая ошибка в их библиотеке — это проблема, когда она пытается получить доступ к std :: ostream, но не может найти ее в ‘std’, это решается с помощью другого определения в cmake:

add_definitions(-D REQUIRE_IOSTREAM)

Это приводит к последней ошибке, с которой мне не удалось справиться, я как гуглил ее, посмотрел на stackoverflow и посмотрел в примерах файлы VSproject, которые поставляются с Maya, но не смог ее решить.
Ошибки (всего 18) происходят из компоновщика и являются неразрешенными внешними символами, пример ошибки:

Error   1   error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MStatus::MStatus(enum MStatus::MStatusCode)" (__imp_??0MStatus@@QAE@W4MStatusCode@0@@Z) referenced in function "public: virtual class MStatus __thiscall hello::doIt(class MArgList const &)" (?doIt@hello@@UAE?AVMStatus@@ABVMArgList@@@Z) C:\path\mayacmake_sample\helloworld.obj Sample_helloworld

Редактировать:
Использование модифицированного cmakelist от Andreas не дало никакой разницы:
Привет, спасибо за ответ, но я все еще получаю много ошибок с неразрешенными внешними данными:

Error   1   error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall MStatus::MStatus(enum MStatus::MStatusCode)" (__imp_??0MStatus@@QAE@W4MStatusCode@0@@Z) referenced in function "public: virtual class MStatus __thiscall hello::doIt(class MArgList const &)" (?doIt@hello@@UAE?AVMStatus@@ABVMArgList@@@Z) D:\mayacmake_sample\helloworld.obj  Maya_Sample_Plugin
Error   13  error LNK2001: unresolved external symbol "public: virtual bool __thiscall MPxCommand::hasSyntax(void)const " (?hasSyntax@MPxCommand@@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)

Любая помощь в этом вопросе ценится.

1

Решение

Вы должны указать компоновщику, на который ссылается компоновщик. 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")
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]