![](/img/trans.png)
[英]spark 3 error java.lang.UnsatisfiedLinkError: no zstd-jni in java.library.path
[英]Error when using JNI on ubuntu: java.lang.UnsatisfiedLinkError: no … in java.library.path
我知道關於這個主題有類似的問題,但沒有一個答案可以解決我的問題:
我有一個java文件:
class hjni {
static {
System.loadLibrary("hjni");
}
private native void print();
public static void main(String[] args) {
new hjni().print();
}
}
我使用以下內容來編譯和生成頭文件:
javac hjni.java
javah -jni hjni
這是 C++ 文件:
#include <jni.h>
#include <stdio.h>
#include "hjni.h"
JNIEXPORT void JNICALL
Java_hjni_print(JNIEnv *env, jobject obj)
{
printf("Hello World!\n");
return;
}
我編譯C++文件:
g++ -fPIC -shared -I/usr/lib/jvm/java-7-openjdk-amd64/include -I/usr/lib/jvm/java-7-openjdk-amd64/include/linux hjni.cpp -o hjni.so
文件hjni.class
、 hjni.h
和hjni.so
都已創建。
我運行java文件:
java -Djava.library.path=. hjni
這是我得到的錯誤:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no hjni in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1889)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at hjni.<clinit>(hjni.java:4)
我使用java -XshowSettings:properties
檢查java.library.path
:
java.library.path = /usr/java/packages/lib/amd64
/usr/lib/x86_64-linux-gnu/jni
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
/usr/lib/jni
/lib
/usr/lib
有趣的是,文件夾
/usr/java/packages/lib/amd64
不存在:
cd /usr/java/packages/lib/amd64
bash: cd: /usr/java/packages/lib/amd64: No such file or directory
我可以在這里找到一個共享庫(libjli.so):
/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64/jli
當我添加上述路徑時
export LD_LIBRARY_PATH=/usr/lib/jvm/java-7-openjdk-amd64/lib/amd64/jli
只要終端打開,路徑添加成功。 如果我關閉終端並重新打開它,則添加的路徑不再存在。 我還將hjni.so
復制到jli
文件夾,但出現相同的鏈接錯誤。
當您執行System.loadLibrary("hjni")
Java 將查找名為libhjni.so
的文件。 調用System.mapLibraryName(libname)
以找出給定庫的文件名應該是什么。 不幸的是, mapLibraryName
的 Javadoc 僅說明名稱將映射到平台相關名稱,但並未說明構建此文件名的規則是什么。 它是 Windows 的<name>.dll
,Linux 的lib<name>.so
和 Mac OS X 的lib<name>.jnilib
,但我現在找不到相關的參考。
如果您重命名文件,一切都會正常。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.