1. 跑一个jni 的最简单的Demo

  1. 需要提前准备 VsCode 编译器、win10下,vscode中集成linux操作系统、c++编译器(gcc、g++),java编译器(jdk1.8+)

  1. 参考:https://mangocool.com/1653030123842.html

  1. JniDemo类:

public class JniDemo {public static void main(String[] args) {System.out.println("hello, this is java!");new JniDemo().hello();}public native void hello();static {System.loadLibrary("cpp_lib_demo");}
}
  1. 通过jdk自带javah命令生成c++的头文件

javah -classpath D:\JniDemo所在路径 com.mangocool.jni.JniDemo

或者使用javac命令(此Demo使用此命令),总之生成一个后缀为.h的头文件

javac -encoding utf8 -h . JniDemo.java

如果头文件报错,将 jni.h 和 jni_md.h 两个头文件准备好,移到同一目录下

jni.h 和 jni_md.h 所在目录一般为:/opt/jdk1.8.0_201/include/

也可以使用linux命令,如:

cp /opt/jdk1.8.0_201/include/jni.h ~/当前的项目目录/jni_demo/
  1. 根据头文件实现c++代码cppDemo.cpp:

注意:一定要在包名前加上:Java_,没有包名 直接Java_JniDemo_hello,_hello是因为java文件中的:new JniDemo().hello();

#include "生成头文件.h" // Import generated header file.
#include "jni.h"JNIEXPORT void JNICALL Java_包名_没有不加_JniDemo_hello(JNIEnv * env, jobject jb){printf("%s","hello, this is cpp!");
}
  1. 创建Makefile文件:

注:记得修改/opt/jdk1.8.0_201/成你的java路径

libcpp_lib_demo.so : cppDemo.cppg++ -o $@ $+ -fPIC -shared -I /opt/jdk1.8.0_201/include -I /opt/jdk1.8.0_201/include/linux.PHONY : clean
clean :rm libcpp_lib_demo.so

这一步主要为了将c++代码生成 libcpp_lib_demo.so 文件,如果最后执行不成功也可以使用命令生成:

g++ -fpic -shared -o  libcpp_lib_demo.so cppDemo.cpp
  1. 创建一个目录,如:jni_demo,将JniDemo.class、cppDemo.cpp、com_mangocool_jni_JniDemo.h、Makefile复制到该目录下下进行编译以及测试:

执行 make ---生成libcpp_lib_demo.so文件

如果执行不成功,未能生成libcpp_lib_demo.so

也可以执行:g++ -fpic -shared -o libcpp_lib_demo.so cppDemo.cpp

最后生成的所有文件:

  1. 最后运行java:

注:记得修改/opt/jdk1.8.0_201/成你的java路径

尽量不适用:java JniDemo // 这个方法不行

/opt/jdk1.8.0_201/bin/java -Djava.library.path='.' JniDemo

最后就可以看到结果啦:---本程序测试已运行成功

分别输出:

hello, this is java!

hello, this is cpp!

jni-Demo-基于linux(c++ java)相关推荐

  1. 基于linux的java学习,Java学习---Linux总结

    Linux总结 1.学习Linux的原因 学习Linux/Unix的原因是它们适合作为服务器,它们不是针对一个人的,是多用户的. 2.操作系统OS OS主要包括: 内核 kernel: 通常将一些与硬 ...

  2. 为什么Android操作系统是基于LInux的开源操作系统,却使用java开发

    Android是基于linux的开源操作系统,而linux是使用标准C语言开发的操作系统,所以android底层驱动以及操作系统内核使用C语言以及汇编开发的. 但是 Android操作系统本身是使用J ...

  3. java jni demo_Android JNI:让你一眼知之的JNI DEMO

    Android JNI:让你一眼知之的JNI DEMO 先按照步骤把 DEMO 跑成功. image 1. 使用 AS 创建一个 Android 项目 注意☑️: image 剩下的就 next fi ...

  4. 阿里云自动java和mysql数据库_阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程)...

    阿里云服务器之基于Linux系统部署上线JavaWeb项目和连接MySQL数据库(从购买云服务器到发布JavaWeb项目全套详细流程) (仅此纪念人生第一篇学习博客) 前阵子接了一个小小的JavaWe ...

  5. Linux -- 基于zookeeper的java api(二)

    Linux -- 基于zookeeper的java api(二) 写一个关于基于集群的zookeeper的自定义实现HA 基于客户端和监控器:使用监控的方法查看每个注册过的节点的状态来做出操作. Wa ...

  6. Java Spring Boot 2.0实战Docker容器与架构原理,视频与课件,基于Linux环境...

    Java Spring Boot 2.0实战Docker容器Linux与架构原理 内容摘要:Docker是最流行的开源容器引擎,Go语言开发,在互联网大规模集群.云计算.微服务等架构中广泛使用.本次课 ...

  7. 基于jsoup的Java服务端http(s)代理程序-代理服务器Demo

    亲爱的开发者朋友们,知道百度网址翻译么?他们为何能够翻译源网页呢,iframe可是不能跨域操作的哦,那么可以用代理实现.直接上代码: 本Demo基于MVC写的,灰常简单,copy过去,简单改改就可以用 ...

  8. java jsch jar_基于Jsch实现Java操作linux服务器

    [概述] 如果大家熟悉Linux的话,一定对ssh,sftp,scp等命令非常熟悉.ssh是一个安全协议,用来在不同系统或者服务器之间进行安全连接.ssh在连接和传送的过程中会加密所有的数据.但是ss ...

  9. 基于Linux服务器的JAVA开发环境搭建

    Linux服务器开发环境搭建 Linux安装Java 一.使用yum查询JDK 二.执行安装命令 三.验证java是否安装成功 四.安装开发环境 Linux安装Nginx 一.安装前环境检查 二.下载 ...

  10. JNI线程、Linux常用命令、权限、防火墙配置

    JNI_OnLoad: 调用System.loadLibrary()函数时, 内部就会去查找so中的 JNI_OnLoad 函数,如果存在此函数则调用. JNI_OnLoad会: 告诉 VM 此 na ...

最新文章

  1. 图森未来完成2.15亿美元D轮融资,将拓展无人驾驶运输服务
  2. 《你必须知道的.NET》,前言
  3. windows7计算机管理,win7系统打开计算机管理(compmgmt.msc)的操作方法
  4. python当前日期加n天_利用python获取当前日期前后N天或N月日期的方法示例
  5. 小米机器狗CyberDog
  6. 【邱锡鹏老师SMP2020教程】90页自然语言处理中的预训练模型
  7. 饮用水中如何去除硝酸盐 溴化物 铬 等有害物质
  8. 点云可视化——实时显示点云流
  9. DTL语言学习(一)模板变量和{% if %}标签的使用
  10. AHRS和IMU的区别
  11. Java体系知识之ElementUI
  12. 美团:后端开发工程师(实习生)面试
  13. 罗技键盘连计算机,罗技键盘怎么连接电脑
  14. 黑科技解密!实现socket进程间迁移!
  15. 011 索引的优点,特大型的表考虑分区技术
  16. 最新ThinkPHP开发的简约自适应导航网站源码
  17. 三菱mr系列服务器故障代码a6,三菱MR-JE-40A操作手册MR-JE-40A故障排除篇手册 - 广州凌控...
  18. 无线智慧城市业务方案建设
  19. Kinect结合Unity开发(一)
  20. java入门知识_Java基础知识杂文

热门文章

  1. SQL server 一行语句实现分页查询!小伙伴们都惊呆了!
  2. linux内核黑名单,如何将内核模块列入黑名单?
  3. 揭秘篇:架构腐化之谜
  4. [乐意黎原创] 关于eMule下载伤硬盘的话题
  5. 悟空HRM人力资源系统正式开源发布
  6. js调用app下载或者打开app(手机下载或者打开新的页面)
  7. 传智播客 HTTP协议详解
  8. 智慧灯杆行业:千亿级大市场!这种“杆”打开新风口
  9. linux控制并发运行进程数
  10. springboot自动配置原理