簡體   English   中英

無法使用System.load加載rxtx本機庫

[英]Not able to load rxtx native library with System.load

我目前在OS X上進行開發,並嘗試使用System.load()加載librxtxSerial.jnilib ,這是行不通的,並且總是導致

java.lang.UnsatisfiedLinkError: no rxtxSerial in java.library.path thrown while loading gnu.io.RXTXCommDriver

當我將lib放在/Library/Java/Extensions一切正常。
我已經仔細檢查了路徑和所有內容,但是當我從/Library/Java/Extensions刪除lib時,它將無法在System.load使用。

我想用可分發的jar捆綁jnilib ,這就是為什么我要以編程方式加載它。

有人有主意嗎?

如果您有這個:

root:
  main.jar
  libjni.jnilib

然后使用以下命令在根目錄中運行代碼:

java -jar main.jar

在這種情況下,您的加載代碼應類似於:

System.load("libjni.jnilib");

但是,對於bot System.loadLibrary(),加載比loadLibrary安全。

建議將jni庫的絕對路徑傳遞給System.load。

我在項目中使用了以下內容:

/**
 * To load the JNI library
 * Created by ice1000 on 2017/1/6.
 *
 * @author ice1000
 */
@SuppressWarnings("WeakerAccess")
public final class Loader {
    public final static String JNI_LIB_NAME;
    private static boolean loaded = false;

    /*
     * maybe it's already loaded, so there should be a check
     */
    static {
        JNI_LIB_NAME = "libjni";
        loadJni();
    }

    @NotNull
    @Contract(pure = true)
    private static String libraryName(@NonNls @NotNull String libName) {
        String ___ = System.getProperty("os.name");
        String fileName;
        if (___.contains("Linux"))
            fileName = libName + ".so";
        else if (___.contains("Windows"))
            fileName = libName + ".dll";
        else // if (___.get("OSX"))
            fileName = libName + ".dylib";
//      else fileName = libName;
        return new File(fileName).getAbsolutePath();
    }

    public static void loadJni() {
        if (!loaded) {
            System.load(libraryName(JNI_LIB_NAME));
            loaded = true;
        }
    }
}

這是我的工作目錄:

root:
  javaClasses.jar
  libjni.dll
  libjni.so
  libjni.dylib

希望這可以幫到你。

確保將您的庫放在LD_LIBRARY_PATH上。

在這里查看為macOS / Linux編寫的許多與JNI相關的示例。

http://jnicookbook.owsiak.org

我建議從超級簡單的Hello world應用開始:

http://jnicookbook.owsiak.org/recipe-No-001/

您可以在那里查看如何使用JNI for macOS使用標准工具進行開發。

希望這可以幫助。 玩JNI。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM