С ++ включает проблему

Я пишу плагин для Autodesk Maya с использованием C ++ и у меня ошибка компоновщика.

Мой основной класс Maya_Search_Plugin.cpp

#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, содержащий некоторые статические методы с заголовком, похожим на это

#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__) */

с реализацией, как это

#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) {
...
}

Однако я получаю следующую ошибку

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

Я предполагаю, что это ошибка компоновки, и где-то есть циклическая ссылка, но я не могу понять, где она.

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

Благодарю.

2

Решение

Я знаю, что это год. Но я наткнулся на это снова пару минут назад …

добавлять

#define MNoVersionString
#define MNoPluginEntry
#include <maya/MFnPlugin.h>

в ваши заголовочные или cpp файлы, где вы написали свой код плагина. Включают

#include <maya/MFnPlugin.h>

непосредственно в вашем main.cpp, который инициализирует плагин.

Большинство примеров в Maya имеют следующую строку:

// This is added to prevent multiple definitions of the MApiVersion string.
#define _MApiVersion

прежде чем включать что-нибудь. Например Вот.

3

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

Проблема может возникнуть, если у вас есть несколько файлов, в том числе MFnPlugin.h

0

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