2017-04-17 5 views
1

を見つけていない私は、ライブラリ・パスを指定して、C++ライブラリをロードする静的なブロックを持つ別のクラスのコンストラクタを呼び出すクラスの不満リンカエラー:ライブラリファイル

static 
    { 
      System.loadLibrary("PixelProxy_jni"); 
    } 

をテストケースを書いていますas、

-Djava.libarary.path=C:\Users\Desktop\libPixelProxy_jni.so 

eclipseのvm引数では、それでも動作しません。

あなたは窓にしているように、それはloadLibraryという名前のファイルを探していないことを意味し、見えます、そのファイルパスからこの

スタックトレース

java.lang.UnsatisfiedLinkError: no PixelProxy_jni in java.library.path 
    at java.lang.ClassLoader.loadLibrary(Unknown Source) 
    at java.lang.Runtime.loadLibrary0(Unknown Source) 
    at java.lang.System.loadLibrary(Unknown Source) 
    at com.XrayPixelProxyInputStream.<clinit>(XrayPixelProxyInputStream.java:36) 
    at com.RadImageReader.readImage(RadImageReader.java:57) 
    at servicedisplay.ServiceImageDisplayer.showImage(ServiceImageDisplayer.java:124) 
    at servicedisplay.test1.ServiceImageDisplayerTest.testShowImageStringIntIntIntIntIntInt(ServiceImageDisplayerTest.java:95) 
+0

私はアプリが実行されているときにeclipseがJavaライブラリのパスを上書きしたと思います。正しい位置を指していることを確認して印刷しましたか? – BackSlash

+0

はい私はそれを印刷し、指定したパスを参照していません。どうすれば設定できますか? – hushie

答えて

1

のための解決策を見つける私を助けてくださいlibPixelProxy_jni.soPixelProxy_jni.dllという名前のファイルが検索されます。 (あなたはそれがSystem.mapLibraryNameを使って探します正確に何を見つけることができます。)

をあなたは、ライブラリの.dllを見つける1を自分でコンパイル、またはSystem.loadを試すことができますいずれか、あなたは絶対パスからネイティブライブラリをロードすることを可能にします:

しかし、実際にライブラリがWindows用にコンパイルされている場合にのみ機能します。

+0

はい私はWindows7上です。あなたが言ったように私は 'System.load(" C:\ Users \ Desktop \ libPixelProxy_jni.so ");を実行しましたが、それは私に新しい例外を投げました。 'java.lang.UnsatisfiedLinkError:C:\ Users \ Desktop \ libPixelProxy_jni.so:この.dll(マシンコード= 0x101)をIA 32ビットプラットフォームで読み込めません。 ' – hushie

+0

@hushie 64ビットのdllのように見えますJavaの64ビットバージョンも使用する必要があります。逆に、ライブラリの32ビット版を入手してください。 –

+0

私のテストクラスでは、静的ブロックを含む別のクラスのコンストラクタを呼び出すメソッドにアクセスしています。だから私はそのテストメソッドを実行するとき、私は上記の例外を取得します。 Java版を変更する他の回避策がありますか? – hushie