5

次のフォルダ構造を含むプラグインを作成します。

  • src
  • native / so / libsystemcommand.so
  • META-INF / MANIFEST.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私のクラスのstartメソッドで私は

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

私は解決策を見つけたと思います。

機能していないプラグインのみをビルドし、それを宛先プラットフォーム ディレクトリにコピーします。この後、ライブラリが見つかったかどうかにかかわらず、ログ ファイルを wtach としてアプリケーションを起動します。

見逃したのは、構成フォルダーを削除することでした。新しいプラグインが解凍されず、ライブラリが構成ディレクトリに存在しませんでした。

申し訳ありませんが、ご回答いただきありがとうございます。

編集 :

構成フォルダーは次の場所にあります。

<installation>/eclipse/configuration/

少なくともファイルなしですべてを削除します

<installation>/eclipse/configuration/config.ini
于 2009-01-23T15:07:41.563 に答える
1

Linux のプラグイン フラグメントでは、次のものを使用します。

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

そして、私が使用するメインのプラグインでは:

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

これは、1 つのプラグイン内でも機能するはずです。

jar のサブ フォルダー内のライブラリに問題があったことを覚えているようですが、なぜそうなるのかはわかりません。代わりに、ライブラリをプラグインフラグメントのルートに置くことに固執しました。これは私にとってはうまくいきます。

また、ライブラリのファイル システム パスを取得して (簡単かどうかはわかりません)、次を使用してロードすることもできます。

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