3

私は多くの同様の質問を読みましたが、このプロジェクトに困惑し続けています。Ubuntu11.0464ビットでEclipseを使用した非常に単純なJNIプロジェクトを試しています。

.soファイルを正しく作成しました。これを知っているのは、JavaプログラムからSystem.load( "/exact/path/to/my/libcproject.so")を使用するときに呼び出すことができるからです。しかし、System.loadLibrary( "libcproject")を使用しようとすると、不満足なリンクエラーが発生します。

これが私の単純なJavaプログラムです。

package pkg;
public class MyClass {
static {
    System.out.println("java.library.path: " + System.getProperty("java.library.path"));
    System.loadLibrary("libcproject");
}
private native String foo(String input);
public static void main(String[] args) {
    MyClass mc = new MyClass();
    String output = mc.foo("input");
    System.out.println(output);
}
}

ご覧のとおり、java.library.pathが何であるかを出力しています。プログラムを実行すると、次のようになります。

java.library.path: /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/../lib/amd64:/home/mlevin/workspace/cproject/Debug:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
input

「入力」は私のC関数が返すものです(それはあなたがそれを与えたものをあなたに返すだけです)。

System.load呼び出しをSystem.loadLibrary( "libcproject")に変更すると、出力からわかるように、/ home / mlevin / worksheet / cproject / Debugがありますが、不満足なリンクエラーが発生します。 libcproject.soは、java.library.pathにあります。

java.library.path: /usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64/server:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/lib/amd64:/usr/lib/jvm/java-6-sun-1.6.0.26/jre/../lib/amd64:/home/mlevin/workspace/cproject/Debug:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Exception in thread "main" java.lang.UnsatisfiedLinkError: no libcproject in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1738)
at java.lang.Runtime.loadLibrary0(Runtime.java:823)
at java.lang.System.loadLibrary(System.java:1028)
at pkg.MyClass.<clinit>(MyClass.java:7)
Could not find the main class: pkg.MyClass.  Program will exit.

私はこの時点でかなり困惑しています。助言がありますか?

ありがとう

4

2 に答える 2

6

lib次のようにプレフィックスを削除します。

System.loadLibrary("cproject");

Javalibは最初と.so最後に自動的に追加されます (とにかく、Unix のような OS の場合。Windows では.dll最後に追加されます)。

于 2012-07-07T21:40:43.220 に答える
0

.export LD_LIBRARY_PATH =.、こうして現在のディレクトリのライブラリパスを設定し、Java ファイルを見つけるようにします。

于 2013-10-15T09:11:57.287 に答える