我正在尝试学习如何使用JNI并且我正在使用此线程中的代码How to compile dynamic library for a JNI application on linux?
HelloJNI.cpp:
#include <jni.h>
#include "HelloJNImpl.h"
#include "HelloJNI.h"
JNIEXPORT void JNICALL Java_Hello_sayHello (JNIEnv *env, jobject obj) {
sayHello();
return;
}
HelloJNI.h:
#ifndef HELLOJNI_H_
#define HELLOJNI_H_
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALL Java_Hello_sayHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
HelloJNImpl.cpp
#include <iostream>
#include <stdio.h>
using namespace std;
void sayHello () {
cout << "Hello World!" << endl;
return;
}
HelloJNImpl.h
#ifndef HELLOJNIMPL_H_
#define HELLOJNIMPL_H_
#ifdef __cplusplus
extern "C" {
#endif
void sayHello();
#ifdef __cplusplus
}
#endif
#endif
接下来,我使用
编译了我的SOg++ -I/opt/java/jdk1.7.0_51/include -I/opt/java/jdk1.7.0_51/include/linux -fPIC -o libHelloJNI.so -shared HelloJNI.cpp
这给了我libHelloJNI.so
当我使用nm
时,我也得到了期望的结果nm libHelloJNI.so | grep say
0000000000000675 T Java_Hello_sayHello
U sayHello
但是当我使用
从我的终端进行测试时java -Djava.library.path=. sayHello
Error: Could not find or load main class sayHello
它说它找不到sayHello。我想我在这里找不到一些小东西,却找不到它。有人能告诉我这段代码可能出错吗?