mac x86环境下 实现java native调用
1. 创建java类
package com.lzz.nativetest;
/**
* @Author: lzz
* @Description:
* @Date: 2023/7/26 14:51
*/
public class MyNative {
public native static void test(String cmd);
}
生成.h头文件
javac -h . MyNative.java
将在同目录中生成 com_lzz_nativetest_MyNative.h
c++代码
在clion中创建项目
-
将jvm环境 /Library/Java/JavaVirtualMachines/jdk1.8.0_201.jdk/Contents/Home/include/
中的jni_md.h、jni.h复制到工程中 -
将上一步生成的com_lzz_nativetest_MyNative.h 复制到当前C++工程,修改该文件中的
#include <jni.h>
修改为
#include "jni.h"
- 创建cpp文件
//
// Created by on 2023/7/26.
//
#include "com_lzz_nativetest_MyNative.h"
#include <iostream>
#include <stdlib.h>
using namespace std;
JNIEXPORT void JNICALL Java_com_lzz_nativetest_MyNative_test
(JNIEnv *env, jclass cls, jstring jstr) {
const char *cstr = (*env).GetStringUTFChars(jstr, NULL);
if (cstr == NULL) {
cout << "Type conversion failed" << endl;
} else {
printf(cstr);
}
(*env).ReleaseStringUTFChars(jstr, cstr);
}
-
构建编译
-
在cmake-build-debug生成了编译后的文件
测试
java中测试
public class MyNativeMain {
public static void main(String[] args) {
System.out.println(System.getProperty("java.library.path"));
// 加载那个编译后的文件
System.load("/Users/lizuchao/CLionProjects/MyJavaNative/cmake-build-debug/libMyJavaNative.dylib");
MyNative.test("调用naive");
}
}