0

私は現在、既存の大規模システムに追加される Java プロジェクトに取り組んでいます。システムとの通信は、ネットワーク接続を介して XML ベースで行われます。

問題は、このシステムが C++ で記述されており、システムと通信するために提供されているライブラリが C++ ベースの静的ライブラリであることです ( .lib)。そのライブラリのヘッダー ファイルがあるので、.javaSWIG を使用して と対応するラッパー ファイルを生成できました。

今私が直面している問題は.dll、Java プログラムからの JNI 呼び出しを受け取るために使用されるこの静的ライブラリを my に含める方法です。

機能する dll を生成するには、どのように gcc を呼び出す必要がありますか? ライブラリのソースにアクセスせずにそれを行うことさえ可能ですか?

役立つ回答をお寄せいただきありがとうございます。

4

1 に答える 1

0

これは間違いなく可能です。SWIG が生成するラッパーを使用して DLL をコンパイルおよびリンクする場合は、次のようにする必要があります。

g++ -Wall -Wextra -shared -o test.dll test_wrap.cxx -Wl,--whole-archive some.lib

ここで重要なことは、取得した .lib に対して SWIG でラップされたコードによって生成された DLL をリンクしていることです。(私は cygwin をあまり使用していませんが-mno-cygwin、.lib のビルド方法によっては、このインスタンスでもコンパイラ フラグに追加することをお勧めします)

于 2012-06-03T09:18:53.247 に答える