gpt4 book ai didi

java - 不满意链接错误 : no libhello in java. library.path

转载 作者:太空宇宙 更新时间:2023-11-04 11:56:37 25 4
gpt4 key购买 nike

我正在编写有关 JNI 的教程,以便在我的项目中熟悉它。但是,我一直停留在运行 Java 程序的教程的这个特定部分。我正在使用 Eclipse,我在其中创建了一个 Java 项目并将文件放在一个包中。当我尝试在不使用 Eclipse 的情况下按照教程进行操作时,没有出现任何错误,因此我认为这是一个与路径相关的问题。

至于我的错误,我得到一个

UnsatisfiedLinkError: no libhello in java.library.path

当我在终端中运行时:

java -Djava.library.path=. helloJNI.HelloJNI

即使我指定了我的路径,它也不起作用。如果您想重现我的步骤,这是我所做的:

  1. 创建 HelloJNI.java 后,我在终端中运行了以下命令:

    javac -h . HelloJNI.java

此命令创建了下面给出的生成的头文件。

  1. 在此之后,我编写了 HelloJNI.c,导航到包文件夹,然后在同一目录中使用此命令编译它:

     gcc -fPIC -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -shared -o libhello.so HelloJNI.c
  2. 然后我向上移动一个目录到 ~/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

我也试过设置工作目录的路径,但我仍然得到相同的结果。我做错了什么?

最佳答案

I moved up one directory to ~/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

关于java - 不满意链接错误 : no libhello in java. library.path,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54114547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com