【问题标题】:How to use jar with embedded .so file in OSGI如何在 OSGI 中使用带有嵌入式 .so 文件的 jar
【发布时间】:2016-05-03 15:27:59
【问题描述】:

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

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

我使用 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 包一起使用时可访问?

有问题的依赖 jar 如下所示:

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

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

【问题讨论】:

    标签: java jar osgi


    【解决方案1】:

    您需要在包含 .so 和 System.loadLibrary 调用的包的清单中添加适当的 Bundle-NativeCode 标头。

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 2018-10-05
      • 2015-01-08
      • 2015-04-17
      • 2018-02-17
      • 2019-09-24
      • 2015-09-26
      • 2019-11-03
      • 2016-10-17
      相关资源
      最近更新 更多