java语言调用C++编写的本地方法
2021/9/22 17:09:49
本文主要是介绍java语言调用C++编写的本地方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java语言调用C++编写的本地方法
java调用C++语言编写本地方法的步骤
- 编写本地方法的java类文件,并加载本地方法的动态链接库
package com.cycfc.maccs.utils; public class GetFirstKey { public static native String getFirstKey(String str); static { // 加载动态链接库 System.loadLibrary("firstKey"); } }
- 生成java类的头文件
javac -h -jni GetFirstKey.java
- 利用C++语言编写本地方法
在生成的头文件中,有需要实现的本地方法名,复制到C++代码中,并指定参数名称
JNIEXPORT jstring JNICALL Java_com_cycfc_maccs_utils_GetFirstKey_getFirstKey (JNIEnv *, jclass, jstring);
在C++代码中引入生成的头文件,然后实现具体的本地方法
#include "com_cycfc_maccs_utils_GetFirstKey.h" JNIEXPORT jstring JNICALL Java_com_cycfc_maccs_utils_GetFirstKey_getFirstKey (JNIEnv *env, jclass, jstring str){ const char *pStr = env -> GetStringUTFChars(str,0); const char *secretKey; switch(*pStr){ case '1': secretKey = "123"; break; case '2': secretKey = "456"; break; default: secretKey = ""; } env -> ReleaseStringUTFChars(str,pStr); jstring key = env -> NewStringUTF((const char*)secretKey); return key; }
- 创建本地方法的动态链接库
linux平台制作的是.so后缀,windos平台制作的是.dll后缀,macos平台后缀是.jnilib
jni.h路径为JAVA_HOME/include
jni_md.h路径为JAVA_HOME/include/linux
如果平台是32位系统,编译动态库时加上-m32参数即可
# linux平台 gcc firstKey.cpp -m32 -I /opt/jdk1.8.0_161/include/ -I /opt/jdk1.8.0_161/include/linux -lstdc++ -fPIC -shared -o libfirstKey.so #macos平台 gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/include/ -I /Library/Java/JavaVirtualMachines/jdk1.8.0_291.jdk/Contents/Home/include/darwin firstKey.cpp -o libfirstKey.jnilib
- 将生成的动态链接库放入相应的路径,路径可以通过
System.getProperty("java.library.path")
获取 - 此时可以编写代码调用本地方法
这篇关于java语言调用C++编写的本地方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-27JavaScript面试真题详解与解答
- 2024-12-27掌握JavaScript大厂面试真题:新手入门指南
- 2024-12-27JavaScript 大厂面试真题详解与解析
- 2024-12-26网络攻防资料入门教程
- 2024-12-26SQL注入资料详解:入门必读教程
- 2024-12-26初学者指南:数据库服务漏洞项目实战
- 2024-12-26网络安全项目实战:新手入门指南
- 2024-12-26网络攻防项目实战入门教程
- 2024-12-26信息安全项目实战:从入门到初步应用
- 2024-12-26SQL注入项目实战:初学者指南