gpt4 book ai didi

java - 我如何告诉 Eclipse 插件本地库驻留在外部插件的位置?

转载 作者:搜寻专家 更新时间:2023-11-01 01:35:52 24 4
gpt4 key购买 nike

我有一个 Eclipse 插件,它是 C++ 库的 Java 包装器。我在 Linux 上运行,所以包装器提供了一个 .jar 和一个 .so。我已经从后一个现有的 JAR 存档中创建了一个插件项目。我已指向 jar 的 native 库位置中的 .so。

我有另一个插件引用了这个包装器插件。我可以从这个成功使用包装器插件的其他插件成功运行独立的 Java 应用程序。使用它的类必须从包装器 jar 导入 java 类,并且在从包装器库实例化任何东西之前,我必须调用 System.loadLibrary。这意味着我已经正确设置了 native 库位置,等等。

当我尝试执行相同类型的操作但在 OSGi 上下文中使用产品定义时,我收到 java.lang.UnsatisfiedLinkError。如果我编辑产品定义的运行配置以添加 -Djava.library.path=<full path to the .so> ,我又可以运行了——也就是说,库可以正常运行。

如何将此路径添加到插件配置中?我是否必须从我的 Activator 类中的 BundleContext 创建一个 ClassLoader,或者是否有插件配置方法来执行此操作?

我认为通过将 .so 的路径添加到我的包装器插件的 MANIFEST.MF 中的运行时类路径,我认为我做对了,但似乎并没有这样做——我想这只是为了类路径-- 不是库路径。想象一下。

有什么想法吗?

最佳答案

我在我的项目中做了类似的事情。

在我依赖于原生代码的插件中,我在插件的根目录下有一个名为 os 的文件夹,其中包含以下内容:

os
-linux
-x86
-<libname>.so
-win32
-x86
-<libname>.dll
-x86_64
-<libname>.dll

build.properties 指定(除其他事项外)os 文件夹应打包为插件构建过程的一部分:

bin.includes = META-INF/,\
plugin.xml,\
lib/,\
os/,\
.,\
schema/

当使用插件的产品在提供 native 库的平台之一下运行时,Java System.loadLibrary("libname") 调用将正确解析库。

这一切都在我基于 Eclipse 3.6.2 的 RCP 应用程序中成功使用。但是,我找不到任何介绍这种方法的引用资料,所以我想知道它是否已被淘汰,取而代之的是一种更 OSGi 友好的方法,即使用 Bundle-NativeCode 指令,我发现了几个引用资料:

关于java - 我如何告诉 Eclipse 插件本地库驻留在外部插件的位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14149818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com