osgi Bundle-NativeCode使用问题

发布于 2021-11-27 07:17:15 字数 300 浏览 850 评论 9

那位大侠用过osgi的Bundle-NativeCode

问题1

在MANIFEST.MF里是不是Bundle-NativeCode要写Bundle内部的相对路径

问题2

在JAVA代码中System.load改写相对路径吗?怎么写

比如我的项目路径如下:

Bundle(项目名)

  src

  com.test

  Test.java

  conf

  lib.so

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

爱的故事 2021-11-30 13:08:04

linux动态库的名字一般是libxxx.so;调用的时候不用写前面的lib

明媚如初 2021-11-30 13:06:26

我项目里的问题终于解决了,
有2个问题

1. 如果SO文件叫libdemonative.so,那必须写System.load(“demonative”)

原因不明

2. 如果你要导入SO文件的话,必须写在static静态代码块中,不能写在start方法里
猜测:可能是在bundle启动前,必须先把动态库先导入进来

因为看清所以看轻 2021-11-30 13:02:47

感谢各位的帮助,
参照红薯先生的办法,
发生了下记错误。
java.lang.UnsatisfiedLinkError: no libdemonative in java.library.path
调查了下,好像是在java的java.library.path下没有配置libdemonative.so
后来在java.library.path下添加了libdemonative.so,但问题依旧。
我参照做成Bundle的例子是下记网站
http://dz.prosyst.com/pdoc/mbs_prof_6.1/um/framework/getting_started/writingBundles.html

断爱 2021-11-30 13:01:28

问题1:OSGi Bundle-NativeCode里要写相对于bundle的相对路径。具体关于NativeCode的用法你可以参考OSGi官方的文档。一般来说罗列出路径,处理器,操作系统应该就可以了。

问题2:NativeCode本质上相当于添加路径去java.library.path并开放给OSGi平台。所以你应该使用相对路径来加载。但我印象中OSGi必须要用OSGi的ClassLoader,因此有什么局限性。

南冥有猫 2021-11-30 12:54:05

如果写成System.loadLibrary("lib")好像会报下记错误

Caused by: java.lang.UnsatisfiedLinkError: Expecting an absolute path of the library: lib

各自安好 2021-11-30 12:49:28

System.loadLibrary("lib") 即可

小瓶盖 2021-11-30 09:33:05

谢谢您的回答。
您的意思是,如果要我想导致conf目录下的lib.so的话,
在java代码中只要写System.load("lib.so")吗?

左岸枫 2021-11-27 23:13:34

我回答下问题2

System.load 方法无需填写路径,直接写名字即可(无需填写扩展名和路径),路径是由系统的PATH路径来指定的,一般 Windows 下可拷贝到 %WINDOWS%System32

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文