2014-11-04 44 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规范。

相关问题