Использование библиотеки .so с osgi с использованием JNA

Я пытаюсь создать пакет 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

Но ничего не получается, мне очень нужна помощь,

Спасибо


person SNour    schedule 10.02.2014    source источник
comment
Какая версия Нопфлерфиша? Я знаю, что в некоторых (бета) версиях были проблемы в этой области, можете ли вы вместо этого протестировать Felix? Или обновить до последней версии Knopflerfish?   -  person Neil Bartlett    schedule 10.02.2014
comment
Я использую последнюю версию knopflerfish 5.0.0.   -  person SNour    schedule 11.02.2014