2016-12-23 4 views
0

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.

+2

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). –

+0

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. –

+0

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. –

Antwort

1

Vielleicht könnten Sie eine Wrapper Shared Library erstellen, die die libfbx.so verknüpfen würde. Siehe this answer (beschreibt, wie ein libabc.so verbunden mit lib123.so aufgebaut wird).

Aber Sie sollten wirklich den Verkäufer dieser FBX-Bibliothek um Rat fragen. Es kann sein, dass einige andere Kunden ein ähnliches Problem haben und bereits eine Lösung gefunden haben.

(intuitiv, ich empfehle nicht objcopy Tricks auf dem proprietären libfbx.so spielen)

Sie auch Ihre Compiler anpassen könnten (zB MELT verwenden, wenn mit GCC arbeiten ...) es speziell einige haben Griff bestimmte Namen wie PropertyNotify (aber ich bin mir nicht sicher, es ist eine gute Idee, und es dauert sicherlich Wochen der Bemühungen).

Verwandte Themen