2

C ライブラリ libB.so に依存する JNI ライブラリ libA.so があります。

Java では、「シンボル検索エラー」を解決する 1 つの方法は次のとおりです。

class A{
    public native void g();
    static{
        System.load("/asdfghjk/libA.so");
    }
}

次に、Javaプログラムを実行します

LD_PRELOAD=libB.so

ただし、このハックは、プログラムが Tomcat JSF でデプロイされている場合など、本番システムでは使用できません。

次の「解決策」は機能しません。

class A{
    public native void g();
    static{
        System.load("/asdfghjk/libB.so");
        System.load("/asdfghjk/libA.so");
    }
}

エラーが発生します:

symbol lookup error: /blah/... undefined symbol: _ZNblahblahblah...
4

1 に答える 1

3

このエラーは、共有ライブラリが依存しているライブラリが見つからないためです。

依存ライブラリの場所を に追加するか、最初に正しい順序でjava.library.path明示的に追加するかSystem.load、何らかの方法でdlopenシステム コールを使用して依存関係をロードする必要があります。

この質問が役に立つかもしれません: Java: 依存関係のある共有ライブラリをロードします

于 2012-12-19T12:14:12.030 に答える