我正在运行64位基本OS。 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 是通过驻留在
/home/karl/workspace/sslarp/bin/sslarp/controller/Controller.class
中的 javac生成的命令sslarp_controller_Controller.h ,它是通过
javah
命令生成的/* 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
getmacip.cpp 我自己做的
#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;
}
libgetmacip.so 通过命令
karl@karl-vm:~/workspace/sslarp/bin$ g++ -fPIC -o libgetmacip.so -shared -I $JAVA_HOME/include -I $JAVA_HOME/include/linux getmacip.cpp -lc
制作我也是以下命令
karl@karl-vm:~/workspace/sslarp/bin$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/karl/workspace/sslarp/lib/
将库添加到Java路径 最佳答案
我忘记在#include "sslarp_controller_Controller.h"
文件中包含代码getmacip.cpp
。
基本上我忘了将 header 添加到.cpp文件。