2017-04-17 74 views
1

我寫測試用例調用具有加載一個C++庫中的靜態塊的其他的類的構造函數的類,不滿意鏈接錯誤:庫文件未找到

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

我所指定的庫路徑as,

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

在eclipse中的vm參數中,但仍然不起作用。

請幫我找到這個

堆棧跟蹤

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

從該文件路徑的解決方案,它看起來你是在Windows上,這意味着loadLibrary不會找一個文件名爲libPixelProxy_jni.so,它會查找一個名爲PixelProxy_jni.dll的文件。 (你可以找到它會尋找使用System.mapLibraryName到底是什麼。)

您可以找到庫的.dll,編譯一個自己,或者嘗試System.load,它可以讓你從一個絕對路徑裝載本地庫:

System.load("C:\Users\Desktop\libPixelProxy_jni.so"); 

但是,這隻有在庫實際上編譯爲windows時纔有效。

+0

是的,我在Windows7上。我做了'System.load(「C:\ Users \ Desktop \ libPixelProxy_jni.so」);'正如你所說的那樣,但它給我一個新的異常。 'java.lang.UnsatisfiedLinkError:C:\ Users \ Desktop \ libPixelProxy_jni.so:無法在IA 32位平臺上加載此.dll(機器代碼= 0x101)' – hushie

+0

@hushie看起來這是一個64位的dll ,你也必須使用64位版本的Java。或者相反,獲取庫的32位版本。 –

+0

在我的測試類中,我正在訪問調用另一個包含靜態塊的類的構造函數的方法。所以當我運行這個測試方法時,我得到了上面的異常。是否有任何其他解決方法改變java版本? – hushie