2014-11-04 48 views
1

我正在尋找解決我的問題的方法。
我正在開發一個必須通過rxtx jar從串口讀取的包。
當我啓動應用程序,我得到以下錯誤如何使用OSGi Equinox設置rxtx?

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver 
Exception in thread "Thread-2" java.lang.UnsatisfiedLinkError: no rxtxSerial 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 gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:123) 
    at ez430.Port.<init>(Port.java:29) 

我已經添加了罐子到構建路徑,並將其設置在JVM中。

請幫助我!

回答

1

由於OSGi是多平臺的,需要照顧出現和消失的捆綁包,因此需要爲捆綁包明確指定對本地庫的處理(如rxtx)。這是使用包含rxtx jar文件的軟件包中的Bundle-NativeCode標頭完成的。可以根據操作系統和體系結構指示要加載的本地庫。在這種情況下,它可能看起來像:

Bundle-NativeCode: lib/Linux/x86_64-unknown-linux-gnu/librxtxSerial.so; 
    osname="Linux";processor="x86-64", 
    lib/Windows/i368-mingw32/rxtxSerial.dll; 
    osname="Windows" 

上面的例子表明,對於Linux的X86-64庫可以在lib/Linux/x86_64-unknown-linux-gnu/librxtxSerial.so和Windows(所有架構)的lib/Windows/i368-mingw32/rxtxSerial.dll找到。路徑在捆綁包中是相對的,因此不要忘記將共享庫包含在捆綁包中。

有關更多詳細信息,請參閱OSGi core規範。

相關問題