Ich stieß auf ein Problem in meinem Projekt als Funktion Name, PropertyNotify() in Paaren von Klassen, in der statischen FBX-Bibliothek wurde bereits als Makro Int-Wert in X11/Xh unter Linux definiert .Redefinieren Funktionsname in einer statischen Bibliothek
virtual bool PropertyNotify(eFbxPropertyCallback, KFbxProperty*); //kfbxobject.h
virtual bool PropertyNotify(eFbxPropertyCallback pType, KFbxProperty* pProperty); //kfbxnode.h
virtual bool PropertyNotify(EPropertyNotifyType pType, FbxProperty& pProperty); //fbxmanipulators.h
virtual bool PropertyNotify(eFbxPropertyCallback pType, KFbxProperty* pProperty); //kfbxtexture.h
#define PropertyNotify 28 //X.h
Die FBX ist nicht Open Source und nur bietet die umfassen Header und statische und dynamische Bibliothek (.a und .OS), daher kann ich nur schließen die FBX-Header in meiner Anwendung, aber die Quelldateien nicht berühren kann. Ich denke, das Namensgebungsproblem könnte die Ursache des Kompilierungsfehlers sein "erwartete unqualifizierte ID vor numerischer Konstante", die ich habe.
Ich versuchte "objcopy --redefine-sym PropertyNotify = FbxPropertyNotify libfbxsdk.a" aufzurufen, um den Funktionsnamen in der statischen Bibliothek neu zu definieren. Dadurch wurde der Fehler "Erwartete unqualifizierte ID" gelöst, jedoch schien er die statische Bibliothek irgendwie zu durcheinander zu bringen, weil er Hunderte von undefinierten Referenzfehlern in den Codes verursachte, in denen die FBX-Funktionen oder Objekte aufgerufen wurden.
Ich frage mich, was ist die Lösung für dieses Problem? Wie von jemandem vorgeschlagen, könnte das Erstellen eines Wrappers der FBX-Bibliothek das Problem wahrscheinlich lösen. Wenn das möglich ist, wäre es sehr nett, wenn jemand ein detailliertes Tutorial oder eine Anleitung zur Implementierung auf Ubuntu teilen könnte. Danke im Voraus.
Da Sie eine proprietäre Bibliothek verwenden, haben Sie wahrscheinlich Unterstützung dafür gekauft. Also benutze die Unterstützungslinie. Oder benenne * dein * 'PropertyNotify' in etwas anderes um, wie' MichaelPropertyNotify' (und das ist wahrscheinlich die einfachste Lösung). –
Ich kann nicht auf die Quelldateien zugreifen, daher glaube ich nicht, dass ich die Funktion umbenennen oder die statische Bibliothek nach den Änderungen neu kompilieren kann. Außerdem habe ich versucht, den Funktionsnamen für andere mit "objcopy --redefine-sym" am Terminal neu zu definieren. Es war keine gute Idee, da es die statische Bibliothek durcheinander brachte und andere Verbindungsfehler verursachte. –
habe ich an * deinen * Code gedacht, nicht an die FBX.Und es kann passieren, dass dein Problem keine einfache Lösung hat, deshalb empfehle ich die Arbeit mit der Unterstützung des FBX-Anbieters. –