Java通过-jni调用c语言

  • 一、编写JAVA程序
  • 二、编译h头文件
  • 三、编写C方法实现
  • 四、生成对象文件
  • 五、生成动态链接库
  • 六、执行

一、编写JAVA程序

public class TestNative {public native void SayHello();public static void main(String[] args){}
}

针对所以引用的C语言方法,增加关键字native

public native void SayHello();

二、编译h头文件

javac TestNative.java
javah -jni TestNative

目录下生成TestNative.h头文件

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class TestNative */#ifndef _Included_TestNative
#define _Included_TestNative
#ifdef __cplusplus
extern "C" {#endif
/** Class:     TestNative* Method:    SayHello* Signature: ()V*/
JNIEXPORT void JNICALL Java_TestNative_SayHello(JNIEnv *, jobject);#ifdef __cplusplus
}
#endif
#endif

其中定义了关键的SayHello方法

三、编写C方法实现

创建一个TestNative.c文件

#include <stdio.h>
#include "TestNative.h"JNIEXPORT void JNICALL Java_TestNative_SayHello(JNIEnv *env, jobject obj){printf("ok!You have successfully passed the Java call c\n");}

注意方法参数变量

四、生成对象文件

gcc -Wall -fPIC -c TestNative.c -I ./ -I /home/ubuntu/sq/java8/jdk1.8.0_91/include/linux/ -I /home/ubuntu/sq/java8/jdk1.8.0_91/include/

其中,路径/home/ubuntu/sq/java8/jdk1.8.0_91/为JAVA安装目录,通过whereis java可以查询;Jni_md.h和Jni.h分别在JDK的/include/linux与/include/目录;-Wall:打开警告开关;fPIC:表示编译为位置独立的代码;

完成后,目录下生成TestNative.o文件

五、生成动态链接库

gcc -Wall -rdynamic -shared -o libdiaoyong.so TestNative.o

注意动态链接库的名字必须是 lib*.so,如上的libdiaoyong.so;因为编译器查找动态连接库时有隐含的命名规则,即在给出的名字前面加上lib,后面加上.so来确定库的名称。这里是libdiaoyong.so对应于Java程序里的diaoyong) ;选项 -rdynamic 用来通知链接器将所有符号添加到动态符号表中。-shared指编译后会链接成共享对象。

六、执行

public class TestNative {public native void SayHello();static {System.loadLibrary("diaoyong");}public static void main(String[] args){TestNative tn=new TestNative();tn.SayHello();System.out.println("haha");}
}

加载动态链路库,并调用。执行时需要重新javac编译,并指定java.library.path

java -Djava.library.path=. TestNative

Java通过-jni调用c语言相关推荐

  1. 用java的jni调用C语言的API,实现带图形界面的一元稀疏多项式计算器

    实现步骤: 1) 完成Java代码,编写好Java调用类. 2) 编译你的Java类. 3) 用javah生成编译好的class文件对应的C/C++ 函数的头文件. 4) 实现头文件中的函数原型,编写 ...

  2. java 调用c效率高_java通过JNI调用C语言写的函数,能提高运行效率吗?

    C语言比Java快早就是公认的事实了.而Java可以通过JNI调用C语言写的库很多人也都知道. 但通过JNI调用C语言写的函数能提高效率吗?一直以来我都认为 是的 .昨晚心血来潮做了个测试,本意是想看 ...

  3. Java通过JNI调用C++动态链接库dll,并打在jar包内 ——JNA-JNI(一)

    Java通过JNI调用C++动态链接库dll,并打在jar包内--JNA-JNI(一) 系列文章: Java通过JNI调用C++动态链接库dll,并打在jar包内 --JNA-JNI(一) Java使 ...

  4. JAVA通过JNI调用C++动态链接库CLL(二)

    简介 使用Visual Studio 2017新建c++动态链接库dll项目 编写JniDemo.h中getName实现并生成DLL 编写JniDemo.h在JniDemo.c实现getName方法 ...

  5. JAVA通过JNI调用C++动态链接库CLL(一)

    简介 使用eclipse新建JAVA项目并生成.h头文件 新建项目JniDemo 新建测试类JniTest并声明一个native的方法 使用Javah命令生成native方法的声明的C/C++头文件 ...

  6. Java利用JNI调用c++代码简易例子演示

    点击打开链接 (提取码:8676) 一.首先简单交代一下两个问题: 1.什么是JNI                - - -     JNI的全名为Java Native Interface(Jav ...

  7. java通过jni调用c++并联调

    1 jni 1.1 jni简介 本节摘抄自:https://blog.csdn.net/qq_28261343/article/details/77971823 JNI是Java Native Int ...

  8. java在主程序修改函数输出,Java通过JNI调用CUDA

    --NG 这段时间因为工作需要,要用到在java中调用cuda程序,但是令人蛋疼的是网上这方面的资料几乎没有,所以只好我自己摸索.我的想法是通过java的JNI接口调用cuda,但是很明显正常情况下是 ...

  9. jni c call java_Java通过-jni调用c语言

    (4)生成的TestJNI.h文件如下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for cl ...

最新文章

  1. 全球研发开支排名:亚马逊第一,BATJ排不上号!
  2. 2014年年度工作总结--IT狂人实录
  3. JS Math的几个方法使用实例
  4. 每天定时备份mysql数据库任务
  5. 在开发游戏过程中遇到的一些错误(很基础的错误)
  6. Spring Cloud Alibaba:一步一步教你搭建Nacos集群
  7. angular cli 切换 css_漫谈 Angular 定制主题的四种方式
  8. c语言使用指针改数组逆置,用指针作函数参数,编写函数,将一个整型数组中的元素全部逆置。...
  9. C/C 语言中extern的用法
  10. Linux环境编译时报错/lib64/libdl.so.2: could not read symbols: Invalid operation
  11. Activiti数据库表结构(表详细版)
  12. 软件设计师-软件知识产权保护
  13. 图像处理——在Python中使用OpenCV和PIL显示图像(legacy)
  14. Unit5 Survival Shooter笔记3
  15. Python中的字符串比较:与== [重复]
  16. 第十二届蓝桥杯大赛软件赛决赛题解
  17. 2018Oracle11g下载与安装菜鸟教程(二)
  18. cloudflare-5s盾分析
  19. IT系统架构及架构体系详解
  20. 【插件】油猴插件安装

热门文章

  1. 3.HDFS之shell基本操作
  2. 一文搞懂 Service Mesh 和 API Gateway 关系和区别
  3. Android seekbar滑块显示不全问题解决
  4. MySQL选错索引导致的线上慢查询事故复盘
  5. 收藏 | 最最最最简单、最最最最详细的Python和Pandas安装教程
  6. php post如何获取数据,php获取POST数据的三种方法
  7. Python入门教程(一)
  8. 如何从一个美术变成程序员?
  9. 有效使用关键词,增加亚马逊销售额
  10. 第一财经日报CBN 电子版