首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cmake和VS2012的Maya插件编译问题

使用cmake和VS2012的Maya插件编译问题
EN

Stack Overflow用户
提问于 2013-07-19 13:28:27
回答 1查看 2.3K关注 0票数 2

我正在尝试编译在玛雅API中找到的示例插件,使用cmake创建一个Visual 2012项目。然而,在编译Maya附带的库时,似乎存在一些问题。第一个问题是库试图补偿一些旧的bool实现,这是通过添加预处理器定义来解决的。

代码语言:javascript
复制
add_definitions(-D _BOOL)

到cmake文件。

他们库中的下一个错误是一个问题,它试图访问std::ostream,但是无法在'std‘中找到它,使用cmake中的另一个定义解决了这个问题:

代码语言:javascript
复制
add_definitions(-D REQUIRE_IOSTREAM)

这导致了我无法通过的最后一个错误,我都搜索过它,查看了堆栈溢出,并且查看了maya附带的示例VSproject文件,无法解决它。错误(总共18次)来自链接器,并且都是未解决的外部符号,例如错误:

代码语言:javascript
复制
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

编辑:使用Andreas修改后的cmakelist的并没有产生任何区别:嘿,谢谢你的回复,但是我还是遇到了很多无法解决的外部因素的错误:

代码语言:javascript
复制
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文件中的路径以适应我的安装,现在看起来如下:

代码语言:javascript
复制
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)

这件事上的任何帮助都是徒劳无功的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-19 20:19:59

您需要告诉链接器链接到哪个库来链接,用TARGET_LINK_LIBRARIES完成。下面是我在我的CMakeLists.txt中使用的内容。

代码语言:javascript
复制
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")
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17747339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档