2017-09-15 7 views
1

のOSGiバンドルからネイティブメソッドの呼び出し中に、私はこのプラグインでネイティブ.soライブラリを使用するプラグイン1. と呼ばれる日食File-->New-->Other-->Plug-in Projectを使用して1つのOSGiプラグイン(バンドル)を作成しました。私はプラグインプロジェクトのルートにlibtest_app_wrap1.soを追加しました。ないUnsatisfiedLinkError

plugin project structure

そして、ここの下にマニフェストファイルは

Manifest-Version: 1.0 
Bundle-ManifestVersion: 2 
Bundle-Name: JniTest 
Bundle-SymbolicName: JniTest 
Bundle-Version: 1.0.0.qualifier 
Bundle-Activator: jnitest.Activator 
Bundle-RequiredExecutionEnvironment: JavaSE-1.8 
Import-Package: org.osgi.framework;version="1.3.0" 
Bundle-NativeCode: libtest_app_wrap1.so; osname=linux; processor=amd64 

であり、これは私が作成し、私のアクティベータークラスのコード

package jnitest; 

import org.osgi.framework.BundleActivator; 
import org.osgi.framework.BundleContext; 

public class Activator implements BundleActivator { 

    public Activator() { 
     System.loadLibrary("test_app_wrap1"); 
     System.out.println("Library Loaded Successfully......."); 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see 
    * org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext) 
    */ 
    public void start(BundleContext context) throws Exception { 
     try { 
      test_app.foo(); 

     } catch (Throwable tr) { 
      tr.printStackTrace(); 

     } 
    } 

    /* 
    * (non-Javadoc) 
    * 
    * @see 
    * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) 
    */ 
    public void stop(BundleContext context) throws Exception { 
     System.out.println("Goodbye World!!"); 
    } 

} 

であるように私のプロジェクトの構造が見えますeclipse expを使ってプラグインプロジェクトからjarファイルを作成するオルト機能。出力jarファイルには.soライブラリが含まれています。

私はSystem.loadLibrary("test_app_wrap1");を呼び出すときに例外やエラーは発生しませんが、test_app.foo();というメソッドを呼び出すとUnsatisfiedLinkErrorと表示されます。 test_app.foo()は、.soで定義されているjniメソッドです。

このエラーを解決する手がかりはありません。それが解決するのを助けてください。

[編集:出力バンドル内容]

ここで出力ジャー

jar output

+0

あなたは 'バンドル-NativeCodeを試みることができる:/libtest_app_wrap1.so。 osname = Linux; processor = x86-64'([OSGiリファレンス](https://www.osgi.org/developer/specifications/reference/)参照)? – howlger

+0

@howlger私は 'Bundle-NativeCode:/libtest_app_wrap1.so;を試しました。 osname = Linux; processor = x86-64'しかし助けにはならなかった。それと同じ例外。私はubuntuマシンで試しています。 – Raj

+0

私の理解では、 'Bundle-NativeCode:... 'では、OSGiはあなたのJavaコードで' System.loadLibrary(...); 'の代わりにネイティブコードを読み込みます。 'System.loadLibrary(...);'とバンドルアクチベータなしで( 'test_app.foo();'はアクチベータの 'start()'が終了した後でなければ呼び出せません) – howlger

答えて

-1

の内容は、プロジェクトにjarファイルを追加している経由:プロジェクト - >プロパティ - > Libraries->追加> plugin.xml-> Runtime->クラスパスセクション - を経由して、クラスパスにjarファイルを追加瓶

を追加する方法を、次の

または 使用を追加 ジャー

java -Djava.library.path 

と、次によって確認してください。

System.getProperty("java.library.path") 
+0

プラグインプロジェクトに追加するjarファイルはありません。私は '.so'ライブラリを使いたいだけです。追加する必要がある瓶を教えてください。 – Raj

+0

https://stackoverflow.com/questions/36780017/unsatisfiedlinkerror-in-exported-eclipse-executable-jar-file –

+0

私は 'System.loadLibrary(" test_app_wrap1 ");'を呼び出すときに何の例外も出ません。私は、ライブラリで定義されたメソッドを呼び出そうとするときだけ、例外を取得します。 – Raj

関連する問題