Collegamento di una libreria client Maya per libOpenMayalib.a fallisce, MLibrary :: inizializzazione non può essere trovata (anche se gli spettacoli nm libOpenMayalib.a lo contiene)

StackOverflow https://stackoverflow.com/questions/4593195

Domanda

Sto cercando di collegare il mio app con i Maya C ++ API, ma ottengo:

Debug/../src/main.cpp:80: undefined reference to `MLibrary::initialize(bool, char*, bool)'

ma, spettacoli nm:

nm libOpenMayalib.a | grep initialize
00000000000004b0 T _ZN8MLibrary10initializeEPcb
0000000000000380 T _ZN8MLibrary10initializeEbPcb
0000000000000000 b _ZZN8MLibrary10initializeEbPcbE13isInitialized

che sembra corrispondere MLibrary :: inizializzazione, che appare come:

class OPENMAYA_EXPORT MLibrary
{
public:
      MLibrary ();
 virtual    ~MLibrary ();
 static MStatus  initialize (char* applicationName,
         bool viewLicense = false);
 static MStatus  initialize (bool wantScriptOutput,
         char* applicationName,
         bool viewLicense = false);
 static void   cleanup( int exitStatus = 0 );

protected:
// No protected members

private:
// No private members

};

Il processo di collegamento è gestito con:

g++ -L/usr/autodesk/maya2009-x64/lib -m64 -pthread -Wl,-rpath,/usr/autodesk/maya2009-x64/lib -lOpenMayalib  -l3dGraphics -lAG -lAnimEngine -lAnimSlice -lAnimUISlice -lAppVersion -lAshliFX -lAshli -lAutoCam -lawCacheShared -lawnSolver -lawxml2 -lBase -lCgGL -lCg -lCloth -lCommandEngine -lcxaguard -lDataModel -lDebug -lDeformSlice -lDeformUISlice -lDependCommand -lDependEngine -lDevices -lDynSlice -lDynUISlice -lExplorerSlice -lExtensionLayer -lfbxfilesdk -lFoundation -lgcc_s -lGeometryEngine -lguide -lhairlib -lHalf -lHumanIKShared -lHWFoundation -lHWGL -lHWRenderMaya -lHWRender -lIex -liff -lIlmImf -lImage -lImageUI -lImath -lIMFbase -limf -lirc -lJasperSlice -lKinSlice -lKinUISlice -lManips -lMaya -lmocap -lModelSlice -lModelUISlice -lModifiers -lMotionCapture -lNurbsEngine -lNurbsSlice -lNurbs -lNurbsUISlice -lOpenMayaAnim -lOpenMayaFX -lOpenMayaRender -lOpenMaya -lOpenMayaUI -lPolyEngine -lPolySlice -lPoly -lPolyUISlice -lProjectSlice -lPsdTexture -lpython2.5 -lRenderModel -lRenderSlice -lRenderUISlice -lShared -lSharedUI -lstdc++ -lstdc++ -lSubdivEngine -lSubdivGeom -lSubdiv -lSubdivUI -lsvml -ltbbmalloc -ltbb -lTranslators -lUIComponents -lUrchinSlice -lUrchinUISlice -lXm -lzlib -o"BinaryGL3MdlMayaExporter"  ./src/Exporter.o ./src/Format.o ./src/Generic.o ./src/Output.o ./src/main.o   -lm -lgtk-x11-2.0 -ldl -lpthread -lgdk-x11-2.0

Il sistema è Ubuntu Maverick 10.10, a 64 bit, e Maya è a 64 bit, come pure, e la compilazione con -m64 dà lo stesso risultato.

ho trovato un post simile http://area.autodesk.com/forum/autodesk-maya/sdk/link-errors-when-using-the-openmaya-api-on-linux/ ho preso alcune idee dal suo fascicolo, come l'utilizzo del -Wl, -rpath, ma, che non cambia nulla ..

Inoltre ho provato a installare g ++ - 4.1 come sembra essere quello di cui gli script, ma questo non ha cambiato nulla o (versione attuale è la g ++ - 4.4)

Grazie per quanto riguarda // Johan

È stato utile?

Soluzione

Il problema è il modo in cui si chiama MLibrary::initialize.

Si aspetta una stringa char non-const, che probabilmente è alimentato con una stringa char letterale è implicitamente costante.

Quello che tu chiami è qualcosa di simile lib.initialize(false, "my app", false) che equivale MLibrary::initialize(bool, const char*, bool) -. Tale firma non è infatti esportato da MLibrary

Quello che devi fare per farlo funzionare è quello di utilizzare un nome di un'applicazione non const, per esempio:

// char* appName = "my app"; would be deprecated as string literals are always const
char appName[] = {'m','y',' ','a','p','p'};
lib.initialize(false, appName, false);

Nota. Si tratta di un bug di interfaccia come il nome dell'applicazione deve infatti essere alimentato come un const char* - questo bug è stato risolto nelle versioni successive maya

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top