I am new to osgi bundle development. I am developing osgi bundle to run on the ubuntu machine. I want to access shared libraries (.so
file) from osgi bundle. I am generating osgi bundle jar using maven plugin.
I have added .so
in my code like below image
Here is my pom file which generates osgi bundle jar.
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<extensions>true</extensions>
<configuration>
<instructions>
<Embed-StripVersion>true</Embed-StripVersion>
<Bundle-SymbolicName>${pom.artifactId}</Bundle-SymbolicName>
<Bundle-Name>${pom.artifactId}</Bundle-Name>
<Bundle-Version>${pom.version}</Bundle-Version>
<Import-Package>org.osgi.framework,
javax.net.ssl, javax.net,
com.google.gson,
com.google.gson.reflect,
org.osgi.service.blueprint.container
</Import-Package>
<Bundle-Activator>com.example.ModuleActivator</Bundle-Activator>
<Embed-Dependency></Embed-Dependency>
<Bundle-ClassPath>libexample.so, .</Bundle-ClassPath>
<Bundle-NativeCode>libexample.so</Bundle-NativeCode>
<Export-Package />
<Require-Capability />
<Embedded-Artifacts />
</instructions>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<filtering>false</filtering>
<directory>${basedir}/native</directory>
<includes>
<include>libexample.so</include>
</includes>
</resource>
<resources>
below code is used to access the method defined in so library
System.loadLibrary("example");
test_app.helloWorld();
When I run simple java code without osgi, then I can call the .so
library functions successfully. I can get the output fromtest_app.helloWorld();
.
When I call System.loadLibrary("example");
from osgi bundle from bundle activator I am not getting any Exception
. but when I call the library functions I am getting the exception java.lang.UnsatisfiedLinkError
.
This is the generated manifest file from maven plugin
`
Manifest-Version: 1.0
Bnd-LastModified: 1505136984891
Build-Jdk: 1.8.0_121
Built-By: Raj Sharma
Bundle-Activator: com.example.ModuleActivator
Bundle-ClassPath: libexample.so, .
Bundle-ManifestVersion: 2
Bundle-Name: ExampleModule
Bundle-NativeCode: libexample.so ; osname=linux ; processor=arm
Bundle-SymbolicName: ExampleModule
Bundle-Version: 2.0.5.Release
Created-By: Apache Maven Bundle Plugin
Embed-StripVersion: true
Import-Package: org.osgi.framework;version="[1.8,2)",javax.net.ssl,javax
.net,com.google.gson;version="[2.5,3)",com.google.gson.reflect;version=
"[2.5,3)",org.osgi.service.blueprint.container;version="[1.0,2)"
Require-Capability: osgi.ee;filter:="(&(osgi.ee=JavaSE)(version=1.8))"
Tool: Bnd-3.0.0.201509101326
`
and this is the generated bundle content