window与linux环境下,java调用c语言的方法
windows环境下,java调用c语言的方法
1.环境
- C语言编译器:工具比较多,本文使用的是gcc,带gcc的软件业比较丰富,我使用的是TDM-GCC, 注:网上很多使用的是MinGW,但我遇到了很多坑,最终在联想软件商店中下载的TDM-GCC,nice
- java环境
2.编写native方法java工具类,主要负责与本地native方法链接,不负责业务逻辑
package com.xieshaoping.jni;/*** @author XieShaoping*/
public class NativeEntity {public native String getNativeMsg();public NativeEntity(String filename) {System.load(filename);}}
3.编写调用native方法java的类,主要负责业务逻辑
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;}}
4.编译java生产class
javac NativeEntity.java
5.使用javah生成标头文件
javah -jni com.xieshaoping.jni.NativeEntity
注:直接输入javah -jni NativeEntity时会报错的,因为java有page的概念,需要在根目录下运行上述,命令
此时生产了com_xieshaoping_jni_NativeEntity.h文件
编写C语言
#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 * 转为jstringjclass 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);
}
7.gcc生成类库文件
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
8.运行程序
http://localhost:8080/loadlibrary?lib=D%3A%5CMyProject%5Cjni%5Csrc%5Cmain%5Cjava%5Ccom%5Cxieshaoping%5Cjni%5Ca.exe
显示C语言方法输出的内容
linux环境下,java调用c语言的方法
与windows大部分相同, 不同处:
- 删除“#include <windows.h>”
- 添加java环境变量
export JAVA_HOME=/root/jdk1.8.0_311
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib
- gcc生成类库文件
gcc -I"/root/jdk1.8.0_311/include" -I"/root/jdk1.8.0_311/include/linux" -fPIC -shared LinuxNative.c
默认生成a.out文件
运行成功
大功告成!
附代码:
https://gitee.com/xieshaoping/jni
window与linux环境下,java调用c语言的方法相关推荐
- window 和 linux 环境下杀死tomcat进程——也可以解决其他端口被占用的问题
window 和 linux 环境下杀死tomcat进程--也可以解决其他端口被占用的问题 参考文章: (1)window 和 linux 环境下杀死tomcat进程--也可以解决其他端口被占用的问题 ...
- 关于linux环境下访问Windows数据库的处理方法
** 关于linux环境下访问Windows数据库的处理方法 1 首先需要知道windows系统下的ip地址,打开cmd控制台,输入ipconfig这个命令,获取window的本地ip地址,方便lin ...
- win、linux环境下JAVA+GDAL部署,jar包启动,相关描述,问题解决
文章目录 windows环境下JAVA+GDAL 1.GDAL下载 2.GDAL安装(既解压后拷贝) 3.GDAL测试 4.Jar包方式运行 https://www.jianshu.com/p/6bc ...
- linux环境下java开发_Linux Ubuntu系统下Java开发环境搭建
软件151田杰中 2. 在合适的路径下创建文件夹用来存储Java JDK,本例选择在/opt目录下新建JVM子文件夹.操作如下 打开Terminal(后文成为T1),输入: cd /opt ...
- Linux环境下java安装、配置
因经常需要配置服务器上的环境,本人对java也不擅长,特写此总结,以便后续使用 1. 下载系统对应的jdk版本(下载地址)或者(百度云下载地址 提取码:s8wm ): 2. 把下载的文件放到 /usr ...
- Linux环境下 java程序提交spark任务到Yarn报错
文章目录 摘要 情况1:JSON解析异常 情况2:java.lang.InstantiationException spark.sql.driver 情况3: 中kafka:java.lang.NoC ...
- Linux 环境下Java环境变量配置
1. JDK安装包获取注意事项 由于Oracle的JDK下载需要用户登录并接受协议,lunix环境使用wget下载的jdk只是 一个登录的网页,因此无法进行解压.可以手动下载后选择本地上传. 登录Or ...
- 举例讲解Linux系统下Python调用系统Shell的方法
http://www.jb51.net/article/74508.htm 有时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的.那么我们使用Python如何 ...
- linux环境下的TIME_WAIT和CLOSE_WAIT问题解决方法
再谈应用环境下的TIME_WAIT和CLOSE_WAIT 昨天解决了一个HttpClient调用错误导致的服务器异常,具体过程如下: http://blog.csdn.net/shootyou/art ...
最新文章
- 三星android获取root权限,三星G9250(S6 Edge公开版全网通 Android 5.1)获取ROOT权限详解教程...
- 加权平均融合消除图像拼接的拼缝(Python 代码)
- 2.10. 代码片段:demo方法(Core Data 应用程序实践指南)
- 一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少...
- allegro PCB 引脚网络名不显示之解决办法
- strcpy 函数的实现
- 单词数 (STL set集合)
- HTTP 错误 500.22 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.NET 设置。...
- IOS 高级语法与设计模式5(5.3 协议的基本概念及用法)
- actorx importer 下载_红色新店开业无线端PSD模板_psd素材免费下载_ 640*6001像素(编号:13631922)...
- 01.Python基础_菜单_快捷键_基本语法_变量_输入输出
- linux pmap was java,jvm 《九》pmap linux 命令介绍 及使用
- 剑指Offer——跳台阶
- WordPress 三个必须的安全措施
- java文件读写的基本类_java常用工具类(三)—— 文件读取的操作类
- 湾区人工智能私密圈|湾区AI精英汇
- 关于访问远程服务器的一些基本操作
- C/C++ C# unity Python 帮助文档 书籍 学习资料
- C++序列式容器(STL序列式容器)
- 深度学习--概率图模型(一)