C++ライブラリのJavaラッパーであるEclipseプラグインがあります。私はLinuxで実行しているので、ラッパーは.jarと.soを提供します。この後者の既存のJARアーカイブからプラグインプロジェクトを作成しました。jarのネイティブライブラリの場所にある.soをポイントしました。
このラッパープラグインを参照する別のプラグインがあります。ラッパープラグインを正常に利用するこの他のプラグインからスタンドアロンJavaアプリケーションを正常に実行できます。これを使用するクラスは、ラッパーjarからjavaクラスをインポートする必要があり、ラッパーライブラリから何かをインスタンス化する前に、System.loadLibraryを呼び出す必要があります。これは、ネイティブライブラリの場所などを正しく設定したことを意味します。
同じ種類の操作を実行しようとすると、製品定義を使用してOSGiコンテキスト内で、java.lang.UnsatisfiedLinkErrorが発生します。製品定義の実行構成を編集して追加する-Djava.library.path=<full path to the .so>
と、再び実行できるようになります。つまり、ライブラリは正しく機能します。
このパスをプラグイン構成に追加するにはどうすればよいですか?Activatorクラス内のBundleContextからClassLoaderを作成する必要がありますか、それともこれを行うためのプラグイン構成方法がありますか?
ラッパープラグインのMANIFEST.MFのランタイムクラスパスに.soへのパスを追加することで正しいことを考えましたが、それは実行されていないようです-クラスパス専用だと思います-ではありませんライブラリパス。想像してみろ。
何か案は?