2011-01-04 1 views
0

Я пытаюсь связать свое приложение с Maya C++ API, но i получить:Связывание клиентской библиотеки Maya с libOpenMayalib.a не удается, MLibrary :: initialize не может быть найден (хотя nm показывает libOpenMayalib.a содержит его)

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

но, нм показывает:

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

, который, кажется, соответствует MLibrary :: инициализации, который выглядит следующим образом:

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 

}; 

Процесс связывания выполняется с:

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 

Система является Ubuntu Maverick 10.10, 64-бит, и Майя 64-бит, а также и компиляции с -m64 дает тот же результат.

Я нашел аналогичную должность http://area.autodesk.com/forum/autodesk-maya/sdk/link-errors-when-using-the-openmaya-api-on-linux/ я взял некоторые идеи из его файла, как с помощью -Wl, -rpath, но это ничего не меняет ..

Я также попытался установить г ++ - 4.1 как это кажется, один упомянутый в сценарии, но это ничего не меняет либо (текущая версия г ++ - 4,4)

Спасибо относительно // Йохан

ответ

0

проблема заключается в том, как вы звоните MLibrary::initialize.

Он ожидает строку non-const char, которая, вероятно, снабжается строкой символов literal, которая неявно является константой.

То, что вы называете, является чем-то вроде lib.initialize(false, "my app", false), которое равно MLibrary::initialize(bool, const char*, bool) - эта подпись действительно не экспортируется MLibrary.

То, что вы должны сделать, чтобы заставить его работать, чтобы использовать неконстантное имя приложения, например:

// 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); 

Примечание: Это интерфейс ошибка в качестве имени приложения действительно должен подаваться как const char* - эта ошибка исправлена ​​в более поздних версиях майя.

+0

Спасибо, я собираюсь проверить это! Вместо этого я сделал плагин, который оказался намного лучше, но хорошо знать, в чем причина! :) – Johan

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

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