繁体   English   中英

带有jstring / c ++的Ljava / lang / String错误

[英]Ljava/lang/String error with jstring / c++

我正在运行64位基本OS。 Eclipse ADT。

您好,我正在尝试通过JNI将字符串从C ++转换为Java。

但是,根据我如何尝试和运行应用程序,我遇到两个问题。

  • 错误) run in eclipse时出现以下错误

在此处输入图片说明

在此处输入图片说明

  • 这是eclipse中的文件结构

在此处输入图片说明

  • 这是Java构建路径,包括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.classjavac命令/home/karl/workspace/sslarp/bin/sslarp/controller/Controller.class

通过javah命令生成的sslarp_controller_Controller.h

/* 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路径

我忘记在getmacip.cpp文件中包含代码#include "sslarp_controller_Controller.h"

基本上我忘了将标头添加到.cpp文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM