代码拉取完成,页面将自动刷新
package com.xieshaoping.jni;
/**
* @author XieShaoping
*/
public class NativeEntity {
public native String getNativeMsg();
public NativeEntity(String filename) {
System.load(filename);
}
}
package com.xieshaoping.jni;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author XieShaoping
*/
@RestController
public class LoadlibraryController {
@RequestMapping("loadlibrary")
public String loadlibrary(String lib) {
NativeEntity nativeEntity = new NativeEntity(lib);
String msg = nativeEntity.getNativeMsg();
System.out.println(msg);
return msg;
}
}
javac NativeEntity.java
javah -jni com.xieshaoping.jni.NativeEntity
注:直接输入javah -jni NativeEntity时会报错的,因为java有page的概念,需要在根目录下运行上述,命令
此时生产了com_xieshaoping_jni_NativeEntity.h文件
#include<stdlib.h>
#include<string.h>
#include <stdio.h>
#include <math.h>
#include <windows.h> //linux下,需要注释
#include "com_xieshaoping_jni_NativeEntity.h"
JNIEXPORT jstring JNICALL Java_com_xieshaoping_jni_NativeEntity_getNativeMsg(JNIEnv* env, jobject obj) //一定要与.h里的保持一致
{
//打印内容
char *msg = "正在调用本地本地native方法-windows";
printf(msg);
//char * 转为jstring
jclass strClass = (*env)->FindClass(env, "java/lang/String");
jmethodID ctorID = (*env)->GetMethodID(env, strClass, "<init>","([BLjava/lang/String;)V");
jbyteArray bytes = (*env)->NewByteArray(env, strlen(msg));
(*env)->SetByteArrayRegion(env, bytes, 0, strlen(msg), (jbyte *) msg);
jstring encoding = (*env)->NewStringUTF(env, "utf-8");
return (jstring) (*env)->NewObject(env, strClass, ctorID, bytes, encoding);
}
gcc -m64 -Wl,--add-stdcall-alias -I"D:\MyTool\Java\jdk1.8.0_251\include" -I"D:\MyTool\Java\jdk1.8.0_251\include\win32" -shared WindowsNative.c
-m64 生成64位
-o 命名,默认a.exe
http://localhost:8080/loadlibrary?lib=D%3A%5CMyProject%5Cjni%5Csrc%5Cmain%5Cjava%5Ccom%5Cxieshaoping%5Cjni%5Ca.exe
显示C语言方法输出的内容
与windows大部分相同, 不同处:
export JAVA_HOME=/root/jdk1.8.0_311
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib
gcc -I"/root/jdk1.8.0_311/include" -I"/root/jdk1.8.0_311/include/linux" -fPIC -shared LinuxNative.c
默认生成a.out文件
运行成功
大功告成!
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。