java - 如何在 OSGI 中使用嵌入 .so 文件的 jar

标签 java jar osgi

我正在尝试制作一个 OSGI bundle ,但由于我的一个依赖项而遇到了麻烦。

我正在制作一个应用程序,在 Beaglebone Black 上执行一些串行 IO 和 GPIO 操作。对于串行和 GPIO,我使用库 libbulldog 。该库的 jar 文件之一包含 .so 文件中的 native 代码。

我使用 bnd-platform 包装 libbulldog 库,以从中创建 OSGI 包。

如果我使用这种方法,在尝试在 Apache Felix 中运行应用程序时会出现异常:

java.lang.ExceptionInInitializerError
    at test.BBB.core.BSSerial.setup_port(BSSerial.java:215)
    at test.BBB.core.BSSerial.<init>(BSSerial.java:28)
    at test.BBB.Activator.start(Activator.java:50)
    at org.apache.felix.framework.util.SecureAction.startActivator(SecureAction.java:697)
    at org.apache.felix.framework.Felix.activateBundle(Felix.java:2226)
    at org.apache.felix.framework.Felix.startBundle(Felix.java:2144)
    at org.apache.felix.framework.Felix.setActiveStartLevel(Felix.java:1371)
    at org.apache.felix.framework.FrameworkStartLevelImpl.run(FrameworkStartLevelImpl.java:308)
    at java.lang.Thread.run(Thread.java:745)
Caused by: io.silverspoon.bulldog.core.platform.IncompatiblePlatformException
    at io.silverspoon.bulldog.core.platform.Platform.createBoard(Unknown Source)
    at test.bs.sys.Setup.<clinit>(Setup.java:22)

在 OSGI 上下文之外使用该库不会出现任何问题,但似乎我需要做一些额外的事情才能使 .so 文件在与 OSGI bundle 一起使用时可访问?

相关依赖 jar 如下所示:

|-META-INF
|  |- metadata
|
|-io.silverspoon.bulldog.beagleboneblack
|  |- Java code
|
|-lib
   |- bulldog-linux-native.beagleboneblack.so

应该怎样做才能使嵌入的 .so 文件在 OSGI 上下文中可用?

最佳答案

您需要将适当的 Bundle-NativeCode header 添加到包含 .so 和 System.loadLibrary 调用的包的 list 中。

关于java - 如何在 OSGI 中使用嵌入 .so 文件的 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37008281/

相关文章:

grails - Gail Maven-OSGI捆绑软件为依存关系-解决问题

java - 将 ListView 值传递给另一个 Activity 中的多个 EditText

java - 如何将 Jbutton 制作为矩形

java - 为什么我的 jar 不反射(reflect)变化?

Java防止jar文件中的证书文件(manifest)被篡改

java - org.osgi.* 的包导入是否有不同的处理方式?

java - 适用于任何语言的不同 gearman 库

java - 如果用户输入不是整数,并且允许用户提供另一个输入,如何确保引发异常?

java - 在java中从批处理文件运行jar

java - Apache Camel OSGi 容器由 Java DSL 配置?