Я пытаюсь создать пакет OSGi, который использует общую библиотеку в Linux для печати Hello world.
это manifest.mf пакета
Manifest-Version: 2.0
Bundle-Name: HelloWorld
Bundle-SymbolicName: HelloWorld
Bundle-Version: 1.0.0
Bundle-Description: Hello world bundle
Bundle-Vendor: Knopflerfish
Bundle-Activator: impl.HelloActivator
Bundle-Category: example
Eclipse-PlatformFilter: (& (osgi.os=linux) (osgi.arch=arm))
Bundle-ClassPath: libs/, .
Bundle-NativeCode: libs/libtest.so; osname=Linux; processor=x86
Import-Package: org.osgi.framework, com.sun.jna
тест.с
#include <stdio.h>
void printhello()
{
printf("hello world from c");
}
HelloActivator.java
package impl;
import jna.printhello;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
public class HelloActivator implements BundleActivator {
public static BundleContext bc=null;
public void start(BundleContext arg0) throws Exception {
HelloActivator.bc=arg0;
printhello demo = (printhello) Native.loadLibrary("test",printhello.class);
demo.printhello();
}
public void stop(BundleContext arg0) throws Exception {
HelloActivator.bc=null;
}
}
и printhello.java
package jna;
import com.sun.jna.Library;
public interface printhello extends Library {
public void printhello ();
}
после установки Bundle в среде knopflerfish я получаю эту ошибку:
java.lang.NullPointerException
в org.knopflerfish.framework.bundlestorage.file.Archive.checkNativeLibrary(Archive.java:952) в org.knopflerfish.framework.BundleClassPath.resolveNativeCode(BundleClassPath.java:493) в org.knopflerfish.framework.BundleClassPath.(BundleClassPath. java:102) в org.knopflerfish.framework.BundleClassLoader.(BundleClassLoader.java:158) в org.knopflerfish.framework.PermissionOps.newBundleClassLoader(PermissionOps.java:302) в org.knopflerfish.framework.BundleGeneration.resolvePackages(BundleGeneration. java:549) в org.knopflerfish.framework.BundleImpl.getUpdatedState(BundleImpl.java:1250) в org.knopflerfish.framework.BundleImpl.finalizeActivation(BundleImpl.java:312) в org.knopflerfish.framework.PermissionOps.callFinalizeActivation(PermissionOps .java:265) в org.knopflerfish.framework.BundleImpl.start(BundleImpl.java:295) в org.knopflerfish.bundle.desktop.swing.Desktop$36.run(Desktop.java:2666)
Я пробовал так много решений, включая это one
Но ничего не получается, мне очень нужна помощь,
Спасибо