[英]UnsatisfiedLinkError: no libhello in java.library.path
我正在编写有关JNI的教程,以使其适合我的项目。 但是,我被困在运行Java程序的教程的这一特定部分。 我在使用Eclipse的地方创建了Java项目,并将文件放在包中。 当我尝试不使用Eclipse而是按照本教程进行操作时,不会出现任何错误,因此我认为这是与路径相关的问题。
至于我的错误,我得到了
UnsatisfiedLinkError:java.library.path中没有libhello
当我在终端中运行此命令时:
java -Djava.library.path=. helloJNI.HelloJNI
即使我指定了路径,它也不起作用。 如果您想重现我的步骤,请执行以下操作:
创建HelloJNI.java
,我在终端中运行了以下命令:
javac -h . HelloJNI.java
此命令创建了下面给出的生成的头文件。
之后,我编写了HelloJNI.c
,导航到package文件夹,然后使用以下命令在同一目录中对其进行编译:
gcc -fPIC -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -shared -o libhello.so HelloJNI.c
然后我将一个目录上移到~/eclipse-workspace/HelloJNI/src
并运行以下命令:
java -Djava.library.path=. HelloJNI
产生上述错误。
这是我的代码:
HelloJNI.java
package helloJNI;
public class HelloJNI { // Save as HelloJNI.java
static {
System.loadLibrary("hello"); // Load native library hello.dll (Windows) or libhello.so (Unixes)
// at runtime
// This library contains a native method called sayHello()
}
// Declare an instance native method sayHello() which receives no parameter and returns void
private native void sayHello();
// Test Driver
public static void main(String[] args) {
new HelloJNI().sayHello(); // Create an instance and invoke the native method
}
}
HelloJNI.c
// Save as "HelloJNI.c"
#include <jni.h> // JNI header provided by JDK
#include <stdio.h> // C Standard IO Header
#include "helloJNI_HelloJNI.h" // Generated
// Implementation of the native method sayHello()
JNIEXPORT void JNICALL Java_HelloJNI_sayHello(JNIEnv *env, jobject thisObj) {
printf("Hello World!\n");
return;
}
helloJNI_HelloJNI.h
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class helloJNI_HelloJNI */
#ifndef _Included_helloJNI_HelloJNI
#define _Included_helloJNI_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: helloJNI_HelloJNI
* Method: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_helloJNI_HelloJNI_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
我也尝试过设置工作目录的路径,但是仍然得到相同的结果。 我究竟做错了什么?
我将一个目录上移到
~/eclipse-workspace/HelloJNI/src
这意味着您的libhello.so位于~/eclipse-workspace/HelloJNI/src/helloJNI
目录中,不是吗?
现在,要让Java查找此库,请运行
java -Djava.library.path=helloJNI helloJNI.HelloJNI
或使用绝对路径
java -Djava.library.path=~/eclipse-workspace/HelloJNI/src/helloJNI helloJNI.HelloJNI
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.