2014-02-28 54 views
2

我們正在創建一個可運行的Java jar在beagle骨黑色上運行(運行ubuntu)。不滿意的鏈接錯誤runnable jar引用jssc庫

我們創建了一個可運行的jar,它可以在我們的mac和pc(windows)上正常運行,但不會在ubuntu系統上運行。運行時我們會收到以下錯誤:

Exception in thread "main" java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:58) 
    Caused by: java.lang.UnsatisfiedLinkError: /home/ubuntu/.jssc/linux/libjSSC-2.6_armhf.so: /home/ubuntu/.jssc/linux/libjSSC-2.6_armhf.so: cannot open shared object file: No such file or directory 
     at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
     at java.lang.ClassLoader.loadLibrary1(ClassLoader.java:1965) 
     at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1890) 
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1851) 
     at java.lang.Runtime.load0(Runtime.java:795) 
     at java.lang.System.load(System.java:1062) 
     at jssc.SerialNativeInterface.<clinit>(SerialNativeInterface.java:172) 
     at jssc.SerialPort.<init>(SerialPort.java:118) 
     at InputBoard.<init>(InputBoard.java:33) 
     at InputBoard.main(InputBoard.java:22) 
     ... 5 more 

任何信息將不勝感激。正如我所說,這是運行良好通過終端在基於UNIX的mac上,所以它似乎應該在Ubuntu上工作。我們不知道它爲什麼引用/ home/ubuntu目錄。如果您需要關於該項目的任何代碼信息,請告訴我們,但我不認爲它會有關係。

+0

你有沒有在beagle骨上運行過任何其他Java應用程序?無論是在您的應用程序中,還是Java JVM正在嘗試加載jssc庫。也許一個解決方法是[安裝jssc](http://code.google.com/p/java-simple-serial-connector/wiki/jSSC_Start_Working),看看它是否會超過這個錯誤(不知道Linux是否安裝他們已經與這個Ubuntu版本兼容)。 –

+0

謝謝@Sam,我們在beagle骨上運行過其他Java應用程序沒有問題。這些用於Java的串行端口庫大部分都需要本地插件,例如Windows的dll。我把它們放在Eclipse項目中的本地庫中,並導出了jar,但是我現在正在爲java.system.path收到不滿意的鏈接錯誤任何想法? –

+0

如果您正在討論從shell(命令行)運行,請確保已經設置_LD_LIBRARY_PATH_例如:export LD_LIBRARY_PATH =/directory_where_so_file_is。另外,Java有一個名爲'java.library.path'的系統屬性,您可以使用'-Djava.library.path = ...'來設置它。看到這個[SO帖子](http://stackoverflow.com/questions/661320/how-to-add-native-library-to-java-library-path-with-eclipse-launch-instead-of)做這件事如果在Eclipse中運行。請注意,錯誤中顯示的'.so'文件具有特定版本,因此請確保您具有正確的文件版本。 HTH。 –

回答

0

我修復了這個問題,當我安裝了最新的JDK 8 for Hard float for Arm。以前我嘗試了幾件事情,我嘗試使用版本2.6,2.7和2.8,指定LD_LIBRARY_PATH env。變量,確保庫在〜/ .jssc/linux等等,所有這些都無濟於事,只有在我升級了java之後,它才能完美地工作。

+0

吸菸槍是我使用軟浮動JDK並需要硬浮動JDK。 –

0

您缺少本機運行時庫。你可以使用apt-get來獲取它包含的包來安裝這個庫。要做到這一點,給這個命令。

sudo apt-get install libc6-* 
0

即使使用最新版本,我也有同樣的錯誤。就我而言,事實證明JSSC試圖使用它從.jar文件中複製出來的本地庫的「soft float」版本。我最終用.jar文件中的硬浮點版本替換了文件,並刪除了對該文件的寫入訪問權限。之後所有事情都開始了。