9

共有ライブラリ (C++) と、このライブラリを使用する python モジュールを配布しています。Bullet Physics Library の修正版を (CMake サブプロジェクトとして) ビルドします。Bullet のクラスと関数は 1 つのファイルでのみ使用しbullet_interface.cpp、すべての Bullet の内容は 内に隠されていnamespace { ... }ます。

問題は、他の一部のライブラリがシステムの依存関係として Bullet を必要とし、Bullet のシステム バージョンにリンクしていることです。実際、私のライブラリの依存関係の 1 つ ( libopenrave) は、Bullet シンボルをエクスポートします。(より具体的には、Bullet シンボルをエクスポートするプラグインを動的にロードすることがあります)。

ライブラリをビルドして正しい Bullet 関数を使用する方法があるかどうか疑問に思っていbullet_interface.cppますが、ライブラリは Bullet シンボルを表示しません。ソース コードを変更する必要があったため、システム ブレットを使用できません。ハッキーな解決策の 1 つは、検索と置換を使用してすべての Bullet 関数とクラスの名前を変更することです (ほとんどすべてに文字列 "bt" が含まれます)。より良い方法はありますか?

4

1 に答える 1

5

これは、目的を達成するための少し回りくどい方法ですが、ブレット コードの検索と置換に勝っています。

objcopy次のようなユーティリティを使用して、弾丸ライブラリでシンボルの「接頭辞」を試すことができます。

objcopy --prefix-symbols=old_ bullet.a

これは動的ライブラリでも機能するはずですが、試してみる必要があります。詳細については、この回答を参照してください。

于 2013-02-26T20:12:50.370 に答える