首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++包含问题

C++包含问题
EN

Stack Overflow用户
提问于 2013-07-11 23:10:10
回答 2查看 735关注 0票数 3

我正在使用C++为Autodesk Maya编写一个插件,并且有一个链接器错误。

我的主类是Maya_Search_Plugin.cpp

代码语言:javascript
运行
复制
#include <Utilities.h>

DeclareSimpleCommand( search_face, PLUGIN_COMPANY, "4.5");

//doIt method is entry point for plugin
MStatus search_face::doIt( const MArgList& )
{
    //calls to Maya types/functions and Utilities functions
}

然后,我有一个包含一些静态方法的Utilities类,其头部如下所示

代码语言:javascript
运行
复制
#ifndef __Maya_CPP_Plugin__Utilities__
#define __Maya_CPP_Plugin__Utilities__
//#pragma once

//standard libs
#include <stdio.h>
#include <time.h>
#include <string.h>
#include <iostream>
#include <math.h>

//maya libs
#include <maya/MDagPath.h>
#include <maya/MFn.h>
#include <maya/MFileIO.h>
#include <maya/MIOStream.h>
#include <maya/MFnMesh.h>
#include <maya/MFnTransform.h>
#include <maya/MGlobal.h>
#include <maya/MSelectionList.h>
#include <maya/MSimple.h>
#include <maya/MTypes.h>
#include <maya/MPointArray.h>
#include <maya/MObjectArray.h>


class Utilities{
    public: static const int max_mov = 50;
public:
    static double get_mesh_error(MPointArray, MPointArray, int);
    static MStatus translateManipulator(double amount, MObject *path);
    static void GetSelected(MObjectArray* objects, MFn::Type type);
};

#endif /* defined(__Maya_CPP_Plugin__Utilities__) */

使用这样的实现

代码语言:javascript
运行
复制
#include <Utilities.h>

double Utilities::get_mesh_error(MPointArray a, MPointArray b, int vertexCount){
   ...
}


MStatus Utilities::translateManipulator(double amount, MObject *path){
   ...
}


void Utilities::GetSelected(MObjectArray* objects, MFn::Type type) {
   ...
}

然而,我得到了以下错误

代码语言:javascript
运行
复制
duplicate symbol _MApiVersion in:
    /Users/tmg06qyu/Library/Developer/Xcode/DerivedData/Maya_CPP_Plugin-hjrwvybwlvqyyscbmixdkcpdzjqr/Build/Intermediates/Maya_CPP_Plugin.build/Debug/Maya_CPP_Plugin.build/Objects-normal/x86_64/Maya_Search_Plugin.o
    /Users/tmg06qyu/Library/Developer/Xcode/DerivedData/Maya_CPP_Plugin-hjrwvybwlvqyyscbmixdkcpdzjqr/Build/Intermediates/Maya_CPP_Plugin.build/Debug/Maya_CPP_Plugin.build/Objects-normal/x86_64/Utilities.o
ld: 1 duplicate symbol for architecture x86_64
Command /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld failed with exit code 1

我认为这是一个链接错误,在某个地方有一些循环引用,但我找不出它在哪里。

感谢您的帮助。

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2014-08-25 16:51:58

我知道这是一年前的事了但几分钟前我又偶然发现了这一点...

添加

代码语言:javascript
运行
复制
#define MNoVersionString
#define MNoPluginEntry
#include <maya/MFnPlugin.h>

添加到您编写插件代码的头文件或cpp文件中。包括

代码语言:javascript
运行
复制
#include <maya/MFnPlugin.h>

直接在你的main.cpp中初始化插件。

maya中的大多数示例都具有以下字符串:

代码语言:javascript
运行
复制
// This is added to prevent multiple definitions of the MApiVersion string.
#define _MApiVersion

在包含任何内容之前。例如here

票数 4
EN

Stack Overflow用户

发布于 2015-06-10 20:11:27

如果您有多个包含MFnPlugin.h的文件,则可能会出现此问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17597097

复制
相关文章

相似问题

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