JNI HelloWorld编译,找不到或加载main

时间:2014-03-05 02:03:21

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

我正在尝试学习如何使用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

接下来,我使用

编译了我的SO
g++ -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。我想我在这里找不到一些小东西,却找不到它。有人能告诉我这段代码可能出错吗?

0 个答案:

没有答案