JNI代码中的不满意的LinkError

UnsatisfiedLinkError in JNI Code

本文关键字:不满意 LinkError 代码 JNI      更新时间:2023-10-16

我正在尝试创建一个简单的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

hpapragram.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();
    }
}

hpapragram.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");
}

hpapragram.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:hpapragram.sayhello()

您有:

jniexport void jnicall jnicall java_jnisample_sayhello(jnienv *env,jobject obj)

jniexport void jnicall jnicall java_hpaprogram_sayhello(jnienv *,jobject);

修复.c文件以同意.h文件。