[java][c++]Java调用c++详解
【摘要】 Java调用c++步骤
(1)在Java包中创建native函数。
(2)生成native函数对应的c++头文件。头文件中将包含一个JNI函数声明。
(3)在c++项目中包含此头文件,并将这个JNI函数声明实现的函数,编译生成动态链接库。
(4)在上述Java包使用时,载入动态链接库。
(5)使用时,调用native函数,就是调用c++中的JNI函数。
Java在搭建服务上,有很多成熟的框架,比如Java的spring boot框架。
最近的项目是用c++实现的,但是服务依然采用Java实现。
那么,Java如何调用c++呢?
Java调用c++步骤
(1)在Java包中创建native函数。
(2)生成native函数对应的c++头文件。头文件中将包含一个JNI函数声明。
(3)在c++项目中包含此头文件,并将这个JNI函数声明实现的函数,编译生成动态链接库。
(4)在上述Java包使用时,载入动态链接库。
(5)使用时,调用native函数,就是调用c++中的JNI函数。
逐步详解
(1)在Java包中创建native函数
public class JavaCallCppSimple {
public native String cppServerSimple(String requestStr, String param);
}
在类JavaCallCppSimple中,创建公开的native函数。
其函数包含两个入参,String request,String param,一个返回值 String。
(2)生成native函数对应的c++头文件。头文件中将包含一个JNI函数声明。
比如这个包的名称是,com.company.cpp.tools。上述文件所在的路径是
$ProjectPath\bin\com\company\cpp\tools
那么我们切换目录到
$ProjectPath\bin
运行如下命令
javah -classpath . com.company.cpp.tools.JavaCallCppSimple
生成头文件
com_company_cpp_tools_JavaCallCppSimple.h
头文件内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include<jni.h>
/* Header for class com_company_cpp_tools_JavaCallCppSimple */
#ifndef _Included_com_company_cpp_tools_JavaCallCppSimple
#define _Included_com_company_cpp_tools_JavaCallCppSimple
#ifdef __cplusplus
extern"C"{
#endif
/*
* Class:com_company_cpp_tools_JavaCallCppSimple
* Method:cppServerSimple
* Signature:(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_com_company_cpp_tools_JavaCallCppSimple_cppServerSimple (JNIEnv *, jobject, jstring, jstring);
#ifdef __cplusplus
}
#endif
#endif
(3)在c++项目中包含此头文件,并将这个JNI函数声明实现的函数,编译生成动态链接库。
比如在cmakelist中,加入如下内容
add_library(LabName SHARED com_company_cpp_tools_JavaCallCppSimple.cpp)
(4)在上述Java包使用时,载入动态链接库。
System.load(libPath);
(5)使用时,调用native函数,就是调用c++中的JNI函数。
JavaCallCppSimple javaCallCppSimple = new JavaCallCppSimple();
String res = javaCallCppSimple.cppServerSimple(data, param);
参考:
https://www.cnblogs.com/charley_yang/archive/2011/03/13/1983038.html
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)