Java通过-jni调用c语言
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语言相关推荐
- 用java的jni调用C语言的API,实现带图形界面的一元稀疏多项式计算器
实现步骤: 1) 完成Java代码,编写好Java调用类. 2) 编译你的Java类. 3) 用javah生成编译好的class文件对应的C/C++ 函数的头文件. 4) 实现头文件中的函数原型,编写 ...
- java 调用c效率高_java通过JNI调用C语言写的函数,能提高运行效率吗?
C语言比Java快早就是公认的事实了.而Java可以通过JNI调用C语言写的库很多人也都知道. 但通过JNI调用C语言写的函数能提高效率吗?一直以来我都认为 是的 .昨晚心血来潮做了个测试,本意是想看 ...
- Java通过JNI调用C++动态链接库dll,并打在jar包内 ——JNA-JNI(一)
Java通过JNI调用C++动态链接库dll,并打在jar包内--JNA-JNI(一) 系列文章: Java通过JNI调用C++动态链接库dll,并打在jar包内 --JNA-JNI(一) Java使 ...
- JAVA通过JNI调用C++动态链接库CLL(二)
简介 使用Visual Studio 2017新建c++动态链接库dll项目 编写JniDemo.h中getName实现并生成DLL 编写JniDemo.h在JniDemo.c实现getName方法 ...
- JAVA通过JNI调用C++动态链接库CLL(一)
简介 使用eclipse新建JAVA项目并生成.h头文件 新建项目JniDemo 新建测试类JniTest并声明一个native的方法 使用Javah命令生成native方法的声明的C/C++头文件 ...
- Java利用JNI调用c++代码简易例子演示
点击打开链接 (提取码:8676) 一.首先简单交代一下两个问题: 1.什么是JNI - - - JNI的全名为Java Native Interface(Jav ...
- java通过jni调用c++并联调
1 jni 1.1 jni简介 本节摘抄自:https://blog.csdn.net/qq_28261343/article/details/77971823 JNI是Java Native Int ...
- java在主程序修改函数输出,Java通过JNI调用CUDA
--NG 这段时间因为工作需要,要用到在java中调用cuda程序,但是令人蛋疼的是网上这方面的资料几乎没有,所以只好我自己摸索.我的想法是通过java的JNI接口调用cuda,但是很明显正常情况下是 ...
- jni c call java_Java通过-jni调用c语言
(4)生成的TestJNI.h文件如下: /* DO NOT EDIT THIS FILE - it is machine generated */ #include /* Header for cl ...
最新文章
- 全球研发开支排名:亚马逊第一,BATJ排不上号!
- 2014年年度工作总结--IT狂人实录
- JS Math的几个方法使用实例
- 每天定时备份mysql数据库任务
- 在开发游戏过程中遇到的一些错误(很基础的错误)
- Spring Cloud Alibaba:一步一步教你搭建Nacos集群
- angular cli 切换 css_漫谈 Angular 定制主题的四种方式
- c语言使用指针改数组逆置,用指针作函数参数,编写函数,将一个整型数组中的元素全部逆置。...
- C/C 语言中extern的用法
- Linux环境编译时报错/lib64/libdl.so.2: could not read symbols: Invalid operation
- Activiti数据库表结构(表详细版)
- 软件设计师-软件知识产权保护
- 图像处理——在Python中使用OpenCV和PIL显示图像(legacy)
- Unit5 Survival Shooter笔记3
- Python中的字符串比较:与== [重复]
- 第十二届蓝桥杯大赛软件赛决赛题解
- 2018Oracle11g下载与安装菜鸟教程(二)
- cloudflare-5s盾分析
- IT系统架构及架构体系详解
- 【插件】油猴插件安装