java通过JNI调用c/c++文件
java可以非常顺利地通过JNI机制调用c++原生文件。使得c++文件能够被java调用。
第一步,编写java测试类
首先使用IDEA 建立项目,新建一个JNIDemo的java文件
package com.aijiao.test;
public class JNIDemo {
public native void testHello();
public static void main(String[] args){
System.loadLibrary("TestJNI");
JNIDemo jniDemo= new JNIDemo();
jniDemo.testHello();
}
}
调用terminal
然后输入以下代码:(这个代码可以进一步地制定输出文件夹)javac -h . JNIDemo.java
该代码运行后,会在当前文件夹下生成.h
文件,名为com_aijiao_test_JNIDemo.h
内容如下图所示:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_aijiao_test_JNIDemo */
#ifndef _Included_com_aijiao_test_JNIDemo
#define _Included_com_aijiao_test_JNIDemo
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_aijiao_test_JNIDemo
* Method: testHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_com_aijiao_test_JNIDemo_testHello
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
第二步,编写c代码
-
文件,新建项目,然后如图所示:
-
选择dll,空项目,点完成。然后会生成如下的项目结构
在源文件的文件夹上右键,选择添加->类,输入TestJNI后,其他的会自动生成
然后将刚才生成的com_aijiao_test-JNIDemo.h以及jdk安装后的 jni.h和jni_md.h(C:\Program Files\Java\jdk-11.0.1\include\win32
)拷贝到projects文件夹D:\Documents\Visual Studio 2013\Projects\TestJNI\TestJNI
回到visual studio ,在头文件上右键,添加->现有项,然后选择com_aijiao_test-JNIDemo.h, jni.h和jni_md.h
将com_aijiao_test-JNIDemo.h中的#include <jni.h>改为#include “jni.h”
然后在源文件 TestJNI.cpp上输入下面的代码
#include"com_aijiao_test_JNIDemo.h"
#include <iostream>
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_aijiao_test_JNIDemo_testHello(JNIEnv *, jobject){
printf("c++ test:this is the beginning.");
}
3.配置c工程,生成dll库
右键 解决方案,右键 属性,
然后配置:
配置完后,生成dll文件
显示如图信息:
4.java配置并调用
在右上角 configure 中的 VM options 中 输入library调用的dll的文件夹位置
-Djava.library.path=d:\documents\visual studio 2013\Projects\TestJNI\Release
在运行后出现了如下问题: