2013-07-11 2 views
2

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

Мой главный класс 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 

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

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

Спасибо.

+0

Версия майя? Версия XCode? – Korchkidu

+0

Maya 2014, Xcode 4.6.3 – shaw2thefloor

+0

да, я использую макрос в основном классе, как показано в демонстрационном материале в devkit – shaw2thefloor

ответ

3

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

Добавить

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

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

#include <maya/MFnPlugin.h> 

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

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

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

перед включением ничего. Например, here.

0

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

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

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