当前位置: 首页 > 后端技术 > Java

Java调用自己封装的jni接口

时间:2023-04-01 20:13:21 Java

介绍JNIjava原生接口,jni使java能够调用c\c++写的动态链接库。文章主要介绍和演示如何编写几个简单的jni接口,java直接调用,以及涉及到的一些工具和配置。环境eclipsecppeclipsejeecentos7前提g++编译cpp文件为动态链接库gcc编译c文件为动态链接库(略)java启动jvm时会加载动态链接库,上面编译好的链接库会放在/lib/目录,jvm启动时,默认会加载。要检查将加载哪些目录,请使用以下代码:System.out.println(System.getProperty("java.library.path"))主要步骤是:java定义jni接口javah生成c头文件c\c++实现生成头文件gcc\g++编译c\cpp文件配置动态链接库位置:/home/xxx/tmp/jdk1.8.0_301/bin/javah工作目录:${project_loc}参数:-classpath${project_loc}/target/classes-d${project_loc}/src/jni${java_type_name}修改刷新配置java文件JNI2.javapackagecom.fei.code;publicclassJNI2{publicstaticnativevoidprint();公共本机无效显示();publicnativevoidshowArgs(inti,Strings,char[]c);publicvoidrun(){System.out.println("runhello...");}publicstaticvoidmain(String[]args){System.loadLibrary("myjni");//System.out.println(System.getProperty("java.library.path"));打印();新的JNI2()。展示();新的JNI2()。showArgs(1,"你好",新字符[]{'a','b','c'});}}点击图标按钮生成文件com_fei_code_JNI2.h/*不要编辑这个文件-它是机器生成的*/#include/*类com_fei_code_JNI2的头文件*/#ifndef_Included_com_fei_code_JNI2#define_feiIncluded_com__code_JNI2#ifplusexternC"{#endif/**Class:com_fei_code_JNI2*Method:print*Signature:()V*/JNIEXPORTvoidJNICALLJava_com_fei_code_JNI2_print(JNIEnv*,jclass);/**Class:com_fei_code_JNI2*Method:show*Signature:()V*/JNIEXPORTvoidJNICALLJava_com_fei_code_JNI2_show(JNIEnv*,jobject);/**类:com_fei_code_JNI2*方法:showArgs*签名:(ILjava/lang/String;[C)V*/JNIEXPORTvoidJNICALLJava_com_fei_code_JNI2_showArgs(JNIEnv*,jobject,jint,jstring,jcharArray);#ifdef__cplusplus}#endif#endif编写c++代码com_fei_code_JNI2.cpp#include"com_fei_code_JNI2.h"#include#includeusingnamespacestd;/**Class:com_fei_code_JNI2*方法:print*Signature:()V*/JNIEXPORTvoidJNICALLJava_com_fei_code_JNI2_print(JNIEnv*,jclass){cout<<"Java_com_fei_code_JNI2_print"<GetObjectClass(obj);jmethodIDrun=env->GetMethodID(c,"run","()V");env->CallVoidMethod(obj,run);cout<<"Java_com_fei_code_JNI2_show"<