0

Java で JNI を介して C++ コードを使用しています。C++ コードでは、libstdc++ および libz の関数をいくつか使用しています。C++ 部分は共有ライブラリにリンクされており、ビルドされたライブラリはさまざまな環境 (Linux ベース) で使用されます。

私の懸念は、libstdc++ と libz のバージョンの違いです。その JNI ライブラリを環境 A で構築し、それを環境 B および C に移動した場合、他の libstdc++ および libz バージョンが存在する可能性があります。失敗しますか? それは、これらのライブラリを JNI 共有ライブラリに静的にリンクする必要があるということですか?

PS わずかに異なる 2 つの環境での最初のテストは成功しましたが、それでもここでは安心できません。

4

1 に答える 1

2

これは、C++ を JNI 以外で使用する場合と同じです。一般に、ライブラリ プロバイダーは下位互換性を確保するよう努めています。そのため、ほとんどの場合、古いバージョンに出くわす心配はありません。

いくつかの一般的なオプションがあります。

  1. 依存関係の適切なバージョンを確保するためにパッケージ化に依存します (たとえば、Linux で RPM/DEB パッケージにパッケージ化する場合は、パッケージ メタデータで要件を設定します)。Mac の場合、通常、標準ライブラリの特定の OS バージョンを対象とし、非標準ライブラリ (libz) をインストーラにバンドルします。Cigwin などがなければ、デフォルトで Windows で libstdc++ を期待できるとは思いません。
  2. 静的にリンクします。
  3. 共有ライブラリをアプリケーションにパッケージ化します。
于 2013-08-26T18:58:44.633 に答える