java - JNI 代码中的 UnsatisfiedLinkError

标签 java c++ gcc java-native-interface native

我正在尝试创建一个简单的 JNI 项目来掌握 JNI 的窍门,但我一直遇到这个错误:

Exception in thread "main" java.lang.UnsatisfiedLinkError: HPAProgram.sayHello()

我还没有太多代码,所以我可以将大部分代码粘贴到这里。

我运行以下命令:

javac HPAProgram.java
javah HPAProgram
cc -v -c -fPIC -I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers/ HPAProgram.c++ -o libHPAProgram.o
libtool -dynamic -lSystem libHPAProgram.o -o libHPAProgram.dylib
LD_LIBRARY_PATH=.
export LD_LIBRARY_PATH
java HPAProgram

HPA程序.java

public class HPAProgram {

    public native void sayHello();

    public static void main(String[] args) {

        System.loadLibrary("HPAProgram");
        System.out.println("In java main");

        HPAProgram s = new HPAProgram();
        s.sayHello();
    }
}

HPAProgram.c++:

/*
 * HPAProgram.c++
 *
 *  Created on: Feb 4, 2014
 *      Author: zalbhathena
 */

//#include <jni.h>
#include <stdio.h>
#include "HPAProgram.h"

JNIEXPORT void JNICALL Java_JniSample_sayHello (JNIEnv *env, jobject obj) {
   printf("Hello World!\n");
}

HPA程序.h:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HPAProgram */

#ifndef _Included_HPAProgram
#define _Included_HPAProgram
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HPAProgram
 * Method:    sayHello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HPAProgram_sayHello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif

最佳答案

它说

java.lang.UnsatisfiedLinkError: HPAProgram.sayHello()

你有:

JNIEXPORT void JNICALL Java_JniSample_sayHello (JNIEnv *env, jobject obj)

JNIEXPORT void JNICALL Java_HPAProgram_sayHello(JNIEnv *, jobject);

修复 .c 文件以与 .h 文件一致。

关于java - JNI 代码中的 UnsatisfiedLinkError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21569400/

相关文章:

c++ - 并行运行 CUDA 和 OpenGL,无需使用互操作性

C++编程井字棋AI尝试

c++ - std::thread对象构造过程中的细节

c - 我如何在 C 中使指向数据数组的指针起作用?

java - hibernate :刷新、驱逐、复制和刷新

java - 缩放 Graphics2D 对象会移动它

c - 如何在 Linux 中编译静态库?

c++ - Visual Studio 和 Clang 不会抛出 std::bad_array_new_length

java - Spring Boot 应用程序中存在 JNDI 的原因是什么?

java - python import 相当于 Java 中的导入吗?