2 つの Eclipse プラグインがあります。
plugin-1: .jar のパッケージを他のプラグインに提供します。(C++ ライブラリの Java ラッパー) このプラグインは、[ファイル] -> [新規] -> [その他] -> [既存の JAR アーカイブからのプラグイン] をクリックして作成されました。
plugin-2: plugin-1 のネイティブ ライブラリ .so (
Bundle-NativeCode
ディレクティブは MANIFEST.MF にあります) を持ち、plugin-1 からクラスをインスタンス化します。
(実際に.soをplugin-1に入れてみましたが、.soを含むプラグインプロジェクトの外で、plugin-1 MANIFEST.MFのBundle-NativeCodeディレクティブを使用しても、ライブラリをロードできないようです。 plugin-1 を使用するすべてのプラグインに .so をバンドルする必要があると思います。)
plugin-2 からインスタンス化する plugin-2 から JUnit テストを実行しています。MyClass
これは、plugin-1 からインスタンス化MyLibraryClass
します。MyClass
ネイティブ ライブラリを正常にロードし、ネイティブ ライブラリのロードまたはインスタンス化から例外がスローされることMyLibraryClass
なくインスタンス化します。この場合、プラグインは実行していません。JUnit テストだけです。UnsatisfiedLinkError
MyLibraryClass
(製品構成を使用して) plugin-2 を実行し、 instanceiate を実行するとMyClass
、ネイティブ ライブラリは正常に読み込まれますが、UnsatisifiedLinkError
when MyClass
instantiatesが発生しますMyLibraryClass
。この場合、投稿で説明されているクラスを使用して取得した出力に基づいて、ライブラリがロードされていると思います。ロードされている JNI ライブラリのリストを取得するにはどうすればよいですか?
注: 私は Eclipse 3.6.1 を使用しています。
これは、私がやろうとしていることの本質を示すコード サンプルです。
import com.external_library.MyLibraryClass;
public class MyClass {
public static void loadLibrary() {
// Without Bundle-NativeCode in MANIFEST.MF I get
// "java.lang.UnsatisfiedLinkError: no mylibrary_java in java.library.path"
System.loadLibrary("mylibrary_java"); // Loads libmylibrary_java.so.
// Works fine from JUnit Test
// When I run the plugin, I get an UnsatisfiedLinkError:
// "java.lang.UnsatisfiedLinkError:
// com.external_library.MyLibrary_javaJNI.new_MyLibraryClass__SWIG_3()J"
MyLibraryClass instance = new MyLibraryClass();
}
}