开发者社区> 问答> 正文

osgi Bundle-NativeCode使用问题:报错

那位大侠用过osgi的Bundle-NativeCode

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

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

比如我的项目路径如下:
Bundle(项目名)
  src
  com.test
  Test.java
  conf
  lib.so

展开
收起
kun坤 2020-06-09 23:28:16 547 0
1 条回答
写回答
取消 提交回答
  • 我回答下问题2

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

    ######

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

    ######System.loadLibrary("lib") 即可######

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

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

    ######

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

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

    ######

    感谢各位的帮助,
    参照红薯先生的办法,
    发生了下记错误。
    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

    ######

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

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

    原因不明

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

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

    http://osgi.jxtech.net

    2020-06-09 23:28:20
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载