大家好,最近在看RXTX源码,看到其中使用了JNI native,于是使用eclipse kepler,添加了CDT,可以正常编译,但是生成的DLL不是我想要的,而且在java下不能用,具体细节如下:
package com.lwmake.nativedemo;
public class Native {
public static native void displayHelloWorld();
static{
System.out.println(System.getProperty("jave.library.path"));
System.loadLibrary("
NativeDemoJNILib");
}
public static void main(String[] args){
System.out.println("start");
Native main = new Native();
main.displayHelloWorld();
System.out.println("success");
}
}
其中NativeDemoJNILib是我用CDT配合MINGW生成的DLL,使用javah生成的头文件
#include <jni.h>
/* Header for class com_lwmake_nativedemo_Native */
#ifndef _Included_com_lwmake_nativedemo_Native
#define _Included_com_lwmake_nativedemo_Native
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_lwmake_nativedemo_Native
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_lwmake_nativedemo_Native_displayHelloWorld
(JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
CPP文件如下:
#include "jni.h"
#include "com_lwmake_nativedemo_Native.h"
#include <iostream>
using namespace std;
JNIEXPORT void JNICALL Jave_com_lwmake_nativedemo_Native_displayHelloWord
(JNIEnv *env, jclass jthis){
cout <<"Hello, this is my first c++" << endl;
}
MINGW配置如下:
可以生成DLL文件,但是使用dllexportview发现函数名不对啊:
已经使用了extern"C",但是还是加了前缀_Z50,还有后缀参数,
请问如何去除这些,按照网上的一些方法试了一下,都不行