La vinculación de una biblioteca de cliente Maya para libOpenMayalib.a falla, MLibrary :: initialize no se puede encontrar (a pesar de que muestra nm libOpenMayalib.a lo contiene)

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

Pregunta

Estoy intentando conectar mi aplicación con la API de los mayas C ++, pero me sale:

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

pero, espectáculos nm:

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

que parece coincidir con MLibrary :: initialize, que se parece a:

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

};

El proceso de vinculación se ejecuta 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

El sistema es Ubuntu Maverick 10,10, 64 bits, y Maya es de 64 bits, así, y compilar con -m64 da el mismo resultado.

I encontró un puesto similar http://area.autodesk.com/forum/autodesk-maya/sdk/link-errors-when-using-the-openmaya-api-on-linux/ i tomó algunas ideas de su archivo, como el uso de la -Wl, -rpath, pero, que no cambia nada ..

También intentado instalar g ++ - 4.1, ya que parece ser el que se menciona en los guiones, pero eso no cambia nada tampoco (versión actual es g ++ - 4.4)

Gracias en lo que respecta // Johan

¿Fue útil?

Solución

El problema es la forma en que se llama a MLibrary::initialize.

Se espera una cadena Char no constante, lo que probablemente se alimenta con una cadena de carbón literal que es implícitamente constante.

Lo que llamas es algo así como lo que equivale a lib.initialize(false, "my app", false) MLibrary::initialize(bool, const char*, bool) -. Esta firma de hecho no se exporta por MLibrary

Lo que hay que hacer para que el trabajo es el uso de un nombre de aplicación no constante, por ejemplo:

// 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:. Este es un error de interfaz como el nombre de la aplicación de hecho debe ser alimentado como un const char* - Este error se corrigió en versiones posteriores maya

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top