5

我创建了一个包含以下文件夹结构的插件:

  • 源代码
  • 本机/so/libsystemcommand.so
  • 元信息/清单.MF

清单包括命令

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Commands Plug-in
Bundle-SymbolicName: de.system.commands;singleton:=true
Bundle-Version: 1.0.0
Bundle-Activator: de.system.commands.CommandsPlugin
Bundle-Localization: plugin
Bundle-NativeCode: native/so/libsystemcommand.so; osname = Linux; processor = x86
Require-Bundle: org.eclipse.core.runtime,
 org.apache.commons.logging
Eclipse-AutoStart: true
Export-Package: de.system.commands,
 de.system.commands.jni,
 de.system.commands.utils
Bundle-ClassPath: .

build.properties 看起来像

source.. = src/
output.. = bin/
bin.includes = META-INF/,\
               .,\
               native/

在我Activator上课的开始方法中,我打电话

System.loadLibrary("systemcommand");

在运行时找不到库并抛出UnsatisfiedLinkError 。

java.lang.UnsatisfiedLinkError: no libsystemcommand in java.library.path

我必须在插件中设置更多属性吗?我是否必须在目标平台上解压缩一些信息?

编辑:

java.library.path=/opt/jdk/j2re1.4.2_16/lib/i386/client:/opt/jdk/j2re1.4.2_16/lib/i386:/opt/jdk/j2re1.4.2_16/../lib/i386::/opt/dsa/lib:/opt/dsa/lib
4

4 回答 4

2

我想知道是否需要在没有 lib 前缀的情况下指定库?例如,

System.loadLibrary("systemcommand");

因为这就是在 gcc 链接线上传递库的方式。

于 2009-01-23T13:44:30.093 回答
1

该库必须在您的文件系统中(而不是在存档文件中)。然后您可以使用LD_LIBRARY_PATH指向 lib 的 linux 环境变量或定义属性 java.library.path

于 2009-01-23T13:25:17.057 回答
1

在 linux 的插件片段中,我使用:

Bundle-NativeCode: librptlc.so; osname = linux; processor=x86

在我使用的主插件中:

if (OS.equals(Platform.OS_LINUX)) {
    System.loadLibrary("rptlc");
}

这也应该在一个插件中工作。

我似乎记得 jar 的子文件夹中的库有一些问题,但我不确定为什么会这样。我只是坚持将库放在插件片段的根目录中,这对我有用。

您还可以尝试获取库的文件系统路径(不确定这是否容易)并使用以下方法加载它:

libraryPath = "C:\eclipse\bundles\123\librptlc.so";
System.load(libraryPath);
于 2009-01-23T14:47:01.713 回答
1

我想我找到了解决方案。

我们只构建不起作用的插件并将其复制到目标平台目录。在此之后,我们启动应用程序作为 wtach 日志文件,无论库是否存在。

我们错过的是删除配置文件夹。新插件未解压缩,并且配置目录中不存在该库。

对不起,谢谢你的回答。

编辑 :

配置文件夹位于

<installation>/eclipse/configuration/

至少删除没有文件的所有内容

<installation>/eclipse/configuration/config.ini
于 2009-01-23T15:07:41.563 回答