Hey everybody,
I have some basic experience with c++ but almost no experience with the Maya C++ API. (I am familiar with the Python API though)
Despite being able to compile the DevKit samples from Autodesk, I’m unable to compile the code below.
I tried replacing the code in one of the DevKit samples with the code below and even that wouldn’t compile.
Would anybody be able to tell me why this simple test code is not compiling ?
The errors mention the “pluginMain.obj” but even when removing it and just trying to compile the “testDeformer.hpp” file, I still get a list of “LNK2019: unresolved external symbol” errors.
List of errors:
* error LNK2019: unresolved external symbol "__declspec(dllimport) public: __cdecl Autodesk::Maya::OpenMaya20190000::MPxDeformerNode::MPxDeformerNode(void)" (__imp_??0MPxDeformerNode@OpenMaya20190000@Maya@Autodesk@@QEAA@XZ) referenced in function "public: __cdecl testDeformer::testDeformer(void)" (??0testDeformer@@QEAA@XZ)
* error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __cdecl Autodesk::Maya::OpenMaya20190000::MPxDeformerNode::~MPxDeformerNode(void)" (__imp_??1MPxDeformerNode@OpenMaya20190000@Maya@Autodesk@@UEAA@XZ) referenced in function "public: virtual __cdecl testDeformer::~testDeformer(void)" (??1testDeformer@@UEAA@XZ)
* error LNK2001: unresolved external symbol "public: virtual class Autodesk::Maya::OpenMaya20190000::MObject & __cdecl Autodesk::Maya::OpenMaya20190000::MPxGeometryFilter::accessoryAttribute(void)const " (?accessoryAttribute@MPxGeometryFilter@OpenMaya20190000@Maya@Autodesk@@UEBAAEAVMObject@234@XZ)
* error LNK2001: unresolved external symbol "public: virtual class Autodesk::Maya::OpenMaya20190000::MStatus __cdecl Autodesk::Maya::OpenMaya20190000::MPxGeometryFilter::accessoryNodeSetup(class Autodesk::Maya::OpenMaya20190000::MDagModifier &)" (?accessoryNodeSetup@MPxGeometryFilter@OpenMaya20190000@Maya@Autodesk@@UEAA?AVMStatus@234@AEAVMDagModifier@234@@Z)
* error LNK2001: unresolved external symbol "public: virtual void __cdecl Autodesk::Maya::OpenMaya20190000::MPxGeometryFilter::setModifiedCallback(class Autodesk::Maya::OpenMaya20190000::MSelectionList &,bool)" (?setModifiedCallback@MPxGeometryFilter@OpenMaya20190000@Maya@Autodesk@@UEAAXAEAVMSelectionList@234@_N@Z)
* error LNK2001: unresolved external symbol "public: virtual enum Autodesk::Maya::OpenMaya20190000::MPxNode::Type __cdecl Autodesk::Maya::OpenMaya20190000::MPxDeformerNode::type(void)const " (?type@MPxDeformerNode@OpenMaya20190000@Maya@Autodesk@@UEBA?AW4Type@MPxNode@234@XZ)
I added the visual studio settings below for all the configurations / all platforms and I’m building in x64.
Visual Studio Settings :
- Additional Include directories : C:\ProgramFiles\Autodesk\Maya2019\include;(AdditionalIncludeDirectories)
- Additional Library directories : C:\Program Files\Autodesk\Maya2019\lib;%(AdditionalLibraryDirectories)
- Additional Dependencies :
OpenMaya.lib
OpenMayaRender.lib
OpenMayaUI.lib
Foundation.lib
opengl32.lib%(AdditionalDependencies)
my test code: (I should mention that all my includes seem to work. Intellisense detects them)
My pluginMain.cpp file :
#pragma once
#include <maya/MFnPlugin.h>
#include "testDeformer.hpp"
MStatus initializePlugin(MObject pluginMob) {
MFnPlugin plugin(pluginMob, "testUser", "1.0", "Any");
MStatus status = plugin.registerNode("testNode", testDeformer::id, testDeformer::creator, testDeformer::initialize,
MPxNode::kDependNode, nullptr);
CHECK_MSTATUS_AND_RETURN_IT(status);
return status;
}
MStatus uninitializePlugin(MObject pluginMob) {
MFnPlugin plugin(pluginMob);
MStatus status = plugin.deregisterNode(testDeformer::id);
CHECK_MSTATUS_AND_RETURN_IT(status);
return status;
}
My testdeformer.hpp file :
#pragma once
#include <maya/MGlobal.h>
#include <maya/MTypeId.h>
#include <maya/MItGeometry.h>
#include <maya/MMatrix.h>
#include <maya/MDataBlock.h>
#include <maya/MPxDeformerNode.h>
#include <maya/MObject.h>
#include <maya/MStatus.h>
class testDeformer : public MPxDeformerNode
{
public:
testDeformer() {};
virtual ~testDeformer() {};
static void* creator();
virtual MStatus deform(MDataBlock &data, MItGeometry& itGeo, const MMatrix& localToWorldMatrix, unsigned int geomIndex);
static MStatus initialize();
static MTypeId id;
//inputs
static MObject aTestAttribute;
};
MTypeId testDeformer::id(0x0000001);
void* testDeformer::creator()
{
return new testDeformer();
};
MStatus testDeformer::initialize()
{
MStatus status;
return status;
}
MStatus testDeformer::deform(MDataBlock &data, MItGeometry& itGeo,
const MMatrix& localToWorldMatrix, unsigned int geomIndex)
{
MStatus status;
return status;
};
Would be great if anybody knows why this is happening since I have no clue right now.
Thanks !