Java 在OSGi中加载本机linux库时出现不满意的链接错误

Java 在OSGi中加载本机linux库时出现不满意的链接错误,java,eclipse-plugin,osgi,raspberry-pi,equinox,Java,Eclipse Plugin,Osgi,Raspberry Pi,Equinox,我们的团队试图将-lib捆绑为OSGi捆绑包,以访问Raspberry Pi上的GPIO,但我们得到了一个不满意的linkerror,不知道这里发生了什么以及如何解决它 我们将本机libpi4j.so放在捆绑包的文件夹/lib中,并指定MANIFEST.MF如下: Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Pi4j Bundle-SymbolicName: com.pi4j Bundle-Version: 1.0.0

我们的团队试图将-lib捆绑为OSGi捆绑包,以访问Raspberry Pi上的GPIO,但我们得到了一个
不满意的linkerror
,不知道这里发生了什么以及如何解决它

我们将本机
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)
!会话2013-02-10 08:21:25.975-----------------------------------------------
eclipse.buildId=unknown
java.version=1.7.0_40
java.vendor=Oracle公司
引导加载程序常量:OS=linux,ARCH=arm,WS=gtk,NL=de
!条目org.eclipse.osgi 4 0 2013-02-10 08:21:37.256
!消息应用程序错误
!堆栈1
java.lang.UnsatifiedLink错误:java.library.path中没有libpi4j
位于java.lang.ClassLoader.loadLibrary(ClassLoader.java:1878)
位于java.lang.Runtime.loadLibrary0(Runtime.java:849)
位于java.lang.System.loadLibrary(System.java:1087)
位于com.pi4j.util.NativeLibraryUser(NativeLibraryUser.java:36)
位于eu.gemtec.carepi.app.Application.start(Application.java:30)
在org.eclipse.equinox.internal.app.eclipseeapphandle.run上(eclipseeapphandle.java:196)
位于org.eclipse.core.runtime.internal.adapter.eclipseeappluncher.runApplication(eclipseeappluncher.java:110)
NativeLibraryUser
调用
System.loadLibrary(“libpi4j”)
来加载本机。本机存在于捆绑包的
/lib
-文件夹中,因此这应该不是问题。这里发生了什么,为什么不起作用


如果我没记错的话,equinox将本机解压到bundle池以便加载它,但我找不到适用于我们的应用程序的包,这是一个问题吗?

使用
System.loadLibrary(“pi4j”)
lib
前缀和
。因此,作为JVM提供的映射的一部分,会自动添加
后缀


例如,在大多数UNIX系统上,上述调用将加载
libpi4j.so
。但是,在Mac OS上它将是
libpi4j.dylib
,在Windows上它将是
pi4j.dll
。作为开发人员,您应该只指定根名称,并允许JVM执行物理映射。

尝试调用“System.loadLibrary(“pi4j”)”。库前缀和.so后缀会自动添加。这就是解决方案!如果你创造一个答案,我会接受它。您能否提供用于其他平台的命名方案列表?