我正在运行基本的OS 64位。 Eclipse ADT。
你好我试图通过JNI从C ++到java获取一个字符串。
但是我遇到两个问题,具体取决于我如何尝试运行我的应用程序。
run in eclipse
以下是文件。
Controller.java
package sslarp.controller;
public class Controller {
private native String getMyMac(); // returns the current machines mac address
private native String getMyIp(); // returns the current machines ip address
static {
System.loadLibrary("getmacip");
}
private String myMac;
private String myIp;
public Controller() {
}
public void run() {
myMac = getMyMac();
myIp = getMyIp();
System.out.println("java: mac "+myMac+"\njava: ip "+myIp+"\n");
}
public static void main(String[] args) {
System.out.println("java: starting");
Controller controller = new Controller();
controller.run();
}
}
Controller.class 是通过 javac 命令在[{1}}
中生成的 sslarp_controller_Controller.h ,它是通过/home/karl/workspace/sslarp/bin/sslarp/controller/Controller.class
命令生成的
javah
getmacip.cpp 我自己做了
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class sslarp_controller_Controller */
#ifndef _Included_sslarp_controller_Controller
#define _Included_sslarp_controller_Controller
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: sslarp_controller_Controller
* Method: getMyMac
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_sslarp_controller_Controller_getMyMac
(JNIEnv *, jobject);
/*
* Class: sslarp_controller_Controller
* Method: getMyIp
* Signature: ()Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_sslarp_controller_Controller_getMyIp
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
libgetmacip.so 通过命令#include <jni.h>
#include <stdio.h>
JNIEXPORT jstring JNICALL Java_sslarp_controller_Controller_getMyMac
(JNIEnv *jenv, jobject jobj)
{
printf("c: getMyMac() invoked!\n");
char str[] = "foo";
jstring jstr = jenv->NewStringUTF(str);
return jstr;
}
JNIEXPORT jstring JNICALL Java_sslarp_controller_Controller_getMyIp
(JNIEnv *jenv, jobject jobj)
{
printf("c: getMyMac() invoked!\n");
char str[] = "bar";
jstring jstr = jenv->NewStringUTF(str);
return jstr;
}
我还使用以下命令karl@karl-vm:~/workspace/sslarp/bin$ g++ -fPIC -o libgetmacip.so -shared -I $JAVA_HOME/include -I $JAVA_HOME/include/linux getmacip.cpp -lc
将库添加到java路径
答案 0 :(得分:0)
我忘记将代码#include "sslarp_controller_Controller.h"
包含在getmacip.cpp
文件中。
基本上我忘了将标题添加到.cpp文件中。