2016-12-23 5 views
0

FBXスタティックライブラリの関数名、PropertyNotify()で問題が発生しました.LinuxでX11/Xhのマクロint値として既に定義されています。スタティックライブラリの関数名を再定義

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 

FBXはオープンソースではないとだけ含めるヘッダーおよび静的および動的ライブラリ(.Aと.os)を提供し、それゆえ私は自分のアプリケーションでFBXヘッダを含めることができますが、ソースファイルに触れることができません。私は、命名の問題は、コンパイルエラーの "予期しない非修飾IDの前に数値定数"の原因かもしれないと思います。

静的ライブラリの関数名を再定義するために、 "objcopy --redefine-sym PropertyNotify = FbxPropertyNotify libfbxsdk.a"を呼び出してみました。これにより、 "expected unqualified-id"エラーは解決されましたが、FBXの関数やオブジェクトが呼び出されるコードで何百もの未定義参照エラーが発生したため、静的ライブラリが何とか混乱しているように見えました。

この問題の解決方法は何ですか?誰かが示唆しているように、FBXライブラリのラッパーを作成することで、おそらく問題を解決することができます。可能であれば、誰かがUbuntu上でそれを実装する方法に関する詳細なチュートリアルやガイダンスを分かち合うことができれば非常に親切です。前もって感謝します。

+2

独自のライブラリを使用しているため、おそらくサポートを購入した可能性があります。サポートラインを使用してください。あるいは、あなたの* PropertyNotifyの名前を 'MichaelPropertyNotify'のように変更してください(これはおそらく最も簡単な解決策です)。 –

+0

私はソースファイルにアクセスすることができないので、私は関数の名前を変更したり、変更後にスタティックライブラリを再コンパイルすることはできないと思います。また、端末上で "objcopy --redefine-sym"を使って他の人に関数名を再定義しようとしました。それは静的ライブラリを台無しにし、他のリンクエラーを引き起こしたので、良い考えではありませんでした。 –

+0

私はFBXのコードではなく、あなたのコードを考えました。あなたの問題には簡単な解決策がないことがあるかもしれません。そのため、FBXプロバイダが提供するサポートをお勧めします。 –

答えて

1

libfbx.soをリンクするラッパー共有ライブラリを作成することがあります。 lib123.soにリンクされたlibabc.soを構築する方法については、this answerを参照してください。

しかしFBXライブラリのベンダーには、実際に指導を依頼する必要があります。彼らの顧客のいくつか他の人が同様の問題を抱えている可能性があり、彼らはすでにいくつかの回避策を見つけました。

(直感的に、私は独自のlibfbx.soobjcopyトリックを再生することはお勧めしません)

あなたはまた、あなたのコンパイラをカスタマイズする可能性がある(GCCで作業している場合MELTを使用して例えば...)それは、具体的いくつかを扱う持っていますPropertyNotifyのような特定の名前(しかし、それは良い考えではないと確信しています。