0

次のようにCライブラリをロードしようとするコードがいくつかあります:-

public ThreadAffinity() {
    ctest = (CTest) Native.loadLibrary("ctest", CTest.class);
}

ただし、プロジェクトをビルドしようとすると、次のエラーが発生します。私が得るエラーは次のとおりです:-

UnsatisfiedLinkError: Unable to load library 'libctest': liblibctest.so: cannot open shared object file: No such file or directory
    at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:166)
    at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:239)
    at com.sun.jna.Library$Handler.<init>(Library.java:140)
    at com.sun.jna.Native.loadLibrary(Native.java:393)
    at com.sun.jna.Native.loadLibrary(Native.java:378)
    at com.threads.ThreadAffinity.<init>(ThreadAffinity.java:11)
    at com.threads.ThreadAffinity.main(ThreadAffinity.java:45)

現在の作業ディレクトリはプロジェクトのルートであり、そこに so ファイルが配置されています。また、自分の so ファイルを指すように LD_PRELOAD 変数を変更してみました。ただし、エラーは解決しません。

私のOSXでは、dylibがsoファイルが現在ある場所(プロジェクトルート)に正確に配置されているため、問題なく動作します。私は何を間違っていますか?

4

2 に答える 2

2

例外から:

UnsatisfiedLinkError: Unable to load library 'libctest': liblibctest.so: cannot open shared object file: No such file or directory

次のようなものを使用したことを意味します。

public ThreadAffinity() {
    ctest = (CTest) Native.loadLibrary("libctest", CTest.class);
}

ではない:

public ThreadAffinity() {
    ctest = (CTest) Native.loadLibrary("ctest", CTest.class);
}

したがって、lib のプレフィックスと .so のポストフィックスが追加された JNA が libctest (liblibctest.so) に追加されていることがわかります。

于 2014-02-17T16:33:37.983 に答える