如何告诉Eclipse插件外部插件的本机库驻留在何处? 我有一个Eclipse插件,它是一个C++库的java包装器。我在Linux上运行,所以包装器提供了一个.jar和一个.so。我已经从后一个现有JAR归档文件创建了一个插件项目。我已经指出了jar的本机库位置中的.so
我有另一个插件引用这个包装器插件。我可以从另一个插件成功地运行一个独立的java应用程序,该插件成功地利用了包装器插件。使用它的类必须从包装器jar导入java类,在从包装器库实例化任何内容之前,我必须调用System.loadLibrary。这意味着我已经正确设置了本机库的位置,等等 当我尝试使用产品定义在OSGi上下文中执行相同类型的操作时,我得到一个java.lang.UnsatifiedLinkError。如果我编辑产品定义的运行配置以添加如何告诉Eclipse插件外部插件的本机库驻留在何处? 我有一个Eclipse插件,它是一个C++库的java包装器。我在Linux上运行,所以包装器提供了一个.jar和一个.so。我已经从后一个现有JAR归档文件创建了一个插件项目。我已经指出了jar的本机库位置中的.so,java,eclipse,eclipse-plugin,osgi,Java,Eclipse,Eclipse Plugin,Osgi,我有另一个插件引用这个包装器插件。我可以从另一个插件成功地运行一个独立的java应用程序,该插件成功地利用了包装器插件。使用它的类必须从包装器jar导入java类,在从包装器库实例化任何内容之前,我必须调用System.loadLibrary。这意味着我已经正确设置了本机库的位置,等等 当我尝试使用产品定义在OSGi上下文中执行相同类型的操作时,我得到一个java.lang.UnsatifiedLinkError。如果我编辑产品定义的运行配置以添加-Djava.library.path=,我就可
-Djava.library.path=
,我就可以再次运行——也就是说,库功能正常
如何将此路径添加到插件配置?我是否必须从Activator类中的BundleContext创建类加载器,或者是否有插件配置方法来实现这一点
我认为我将路径添加到了包装器插件的MANIFEST.MF中的.so运行时类路径中,这是正确的做法,但似乎没有做到这一点——我想这只是类路径,而不是库路径。想象一下
有什么想法吗?假设您的库位于/path/to/your/library/foobar.so 你试过这个吗
cd /path/to/eclipse
export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH
./eclipse
-Djava.library.path
属性不应包括foobar.so
(根据LD\u library\u path)
示例:
-Djava.library.path=/path/to/your/library #correct
-Djava.library.path=/path/to/your/library/foobar.so #wrong
export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH #correct
export LD_LIBRARY_PATH=/path/to/your/library/foobar.so:$LD_LIBRARY_PATH #wrong
我在我的项目中也做了类似的事情 在依赖于本机代码的插件中,我在插件的根目录下有一个名为os的文件夹,其中包含以下内容:
os
-linux
-x86
-<libname>.so
-win32
-x86
-<libname>.dll
-x86_64
-<libname>.dll
当使用插件的产品在提供本机库的某个平台下运行时,JavaSystem.loadLibrary(“libname”)
调用将正确解析库
这一切都在我基于Eclipse3.6.2的RCP应用程序中成功地使用。但是,我找不到任何关于这种方法的参考文献,所以我想知道它是否正在被淘汰,转而使用更为OSGi友好的方法,使用Bundle NativeCode指令,我发现了一些关于:
bin.includes = META-INF/,\
plugin.xml,\
lib/,\
os/,\
.,\
schema/