2013-10-03 26 views
0

我有嘗試如下加載C庫的代碼: -無法加載從Java文件,那麼在Eclipse在Ubuntu

public ThreadAffinity() { 
    ctest = (CTest) Native.loadLibrary("ctest", CTest.class); 
} 

但是我在嘗試構建項目時,下面的錯誤;我得到的錯誤是如下: -

UnsatisfiedLinkError: Unable to load library 'libctest': liblibctest.so: cannot open shared object file: No such file or directory 
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:166) 
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:239) 
    at com.sun.jna.Library$Handler.<init>(Library.java:140) 
    at com.sun.jna.Native.loadLibrary(Native.java:393) 
    at com.sun.jna.Native.loadLibrary(Native.java:378) 
    at com.threads.ThreadAffinity.<init>(ThreadAffinity.java:11) 
    at com.threads.ThreadAffinity.main(ThreadAffinity.java:45) 

當前工作目錄是項目和多數民衆贊成在所謂文件所在的根。我也嘗試修改LD_PRELOAD變量來指向我的文件;但是錯誤仍然存​​在。

它在我的OSX上工作得很好,其中dylib完全位於so文件當前的位置(項目根目錄)。 我在做什麼錯?

回答

1

LD_PRELOAD用於當您希望將某個特定版本的相同共享庫優先於另一個共享庫時,此處不適用。

定義jna.library.path指向您的項目根目錄,JNA應該能夠找到它。

此外請確保您的圖書館已建成libctest.so,並且不是無意中命名爲libctest.dylib

1

從異常:

UnsatisfiedLinkError: Unable to load library 'libctest': liblibctest.so: cannot open shared object file: No such file or directory 

這意味着你使用的是這樣的:

public ThreadAffinity() { 
    ctest = (CTest) Native.loadLibrary("libctest", CTest.class); 
} 

,而不是:

public ThreadAffinity() { 
    ctest = (CTest) Native.loadLibrary("ctest", CTest.class); 
} 

因此你看到JNA添加lib和後綴的前綴.so添加到libctest(liblibctest.so)

相關問題