我们的团队尝试将pi4j -lib捆绑为OSGi捆绑,以访问Raspberry Pi上的GPIO,但我们得到了,UnsatisfiedLinkError
并且不知道这里发生了什么以及如何解决。
我们将本机libpi4j.so
放入/lib
包的文件夹中,并指定MANIFEST.MF
如下:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Pi4j
Bundle-SymbolicName: com.pi4j
Bundle-Version: 1.0.0.SNAPSHOT
Bundle-Vendor: http://pi4j.com/
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-NativeCode: lib/libpi4j.so; osname=linux;processor=arm
Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=arm))
Bundle-ClassPath: lib/, .
Export-Package: com.pi4j.concurrent,[.. some more packages]
这是错误消息:
!SESSION 2013-02-10 08:21:25.975 -----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_40
java.vendor=Oracle Corporation
BootLoader constants: OS=linux, ARCH=arm, WS=gtk, NL=de_DE
!ENTRY org.eclipse.osgi 4 0 2013-02-10 08:21:37.256
!MESSAGE Application error
!STACK 1
java.lang.UnsatisfiedLinkError: no libpi4j in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1087)
at com.pi4j.util.NativeLibraryUser.<clinit>(NativeLibraryUser.java:36)
at eu.gemtec.carepi.app.Application.start(Application.java:30)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
该类NativeLibraryUser
具有调用System.loadLibrary("libpi4j")
以加载本机的调用。本地文件存在于/lib
分发包的-文件夹中,因此应该没有问题。这里发生了什么,为什么它不起作用?
如果我没记错的话,春分将本机解压缩到捆绑池中以进行加载,但是我找不到适合我们的应用程序的库,这是问题吗?
使用System.loadLibrary("pi4j")
。的lib
前缀和.so
后缀作为由JVM提供的映射的一部分自动添加。
例如,在大多数UNIX系统上,将调用上述调用libpi4j.so
。但是,在Mac OS上将是libpi4j.dylib
,在Windows上将是pi4j.dll
。作为开发人员,您应该仅指定根名称并允许JVM执行物理映射。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句