我正在尝试创建一个简单的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
HPAProgram.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");
}
HPAProgram.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
答案 0 :(得分:2)
它说
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文件。