博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mac下Java JNI (java native interface)调C
阅读量:6290 次
发布时间:2019-06-22

本文共 2035 字,大约阅读时间需要 6 分钟。

1.编写带有native声明的方法的Java类

2.使用javac命令编译编写的Java类

3.使用java -jni className 来生成后缀名为.h的头文件

4.使用其他语言(C、C++)实现本地方法

5.将本地方法编写的文件生成动态链接库

 

一代码:(不要带包路径)

/**  * native-0study  *  * @author xuedui.zhao  * @create 2018-04-23  */ public class HelloWorld {
public native void hello(); static{
System.loadLibrary("hello"); } public static void main(String[] args){
new HelloWorld().hello(); } }

二:

在终端执行 : javac HelloWorld.java

这时会生成HelloWorld.class 文件

三:使用java -jni className 生成后缀名为.h的头文件

     

/* DO NOT EDIT THIS FILE - it is machine generated */ #include 
/* Header for class HelloWorld */ #ifndef _Included_HelloWorld #define _Included_HelloWorld #ifdef __cplusplus extern "C" {
#endif /* * Class: HelloWorld * Method: hello * Signature: ()V */ JNIEXPORT void JNICALL Java_HelloWorld_hello (JNIEnv *, jobject); #ifdef __cplusplus } #endif #endif

四:创建 HelloWorldImpl.c 文件

#include "jni.h" #include "HelloWorld.h" #include 
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
printf("Hello World!\n"); return; }

五:将本地方法编写的文件生成动态链接库

gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include HelloWorldImpl.c -o libhello.jnilib

此时会抛出异常:

HelloWorldImpl.c:1:10: fatal error: 'jni.h' file not found

#include "jni.h"
^~~~~~~
1 error generated.

六:sudo cp /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_162.jdk/Contents/Home/include

七:ls -al

      drwxr-xr-x 7 xuedui.zhao staff 224 4 23 21:35 .

     drwxr-xr-x 9 xuedui.zhao staff 288 4 23 11:52 ..

     -rw-r--r-- 1 xuedui.zhao staff 442 4 23 14:07 HelloWorld.class

     -rw-r--r-- 1 xuedui.zhao staff 377 4 23 14:07 HelloWorld.h
     -rw-r--r-- 1 xuedui.zhao staff 276 4 23 14:06 HelloWorld.java
    -rw-r--r-- 1 xuedui.zhao staff 170 4 23 21:27 HelloWorldImpl.c
    -rwxr-xr-x 1 xuedui.zhao staff 8400 4 23 21:35 libhello.jnilib

八:终端执行 : java HelloWorld

     Hello World!

转载于:https://www.cnblogs.com/snowHorse/p/8921995.html

你可能感兴趣的文章
CCNP-6 OSPF试验2(BSCI)
查看>>
Excel 2013 全新的图表体验
查看>>
openstack 制作大于2TB根分区自动扩容的CENTOS镜像
查看>>
Unbuntu安装遭遇 vmware上的Easy install模式
查看>>
几个常用的ASP木马
查看>>
python分析postfix邮件日志的状态
查看>>
Mysql-5.6.x多实例配置
查看>>
psutil
查看>>
在git@osc上托管自己的代码
查看>>
机器学习算法:朴素贝叶斯
查看>>
小五思科技术学习笔记之扩展访问列表
查看>>
使用Python脚本检验文件系统数据完整性
查看>>
使用MDT部署Windows Server 2003 R2
查看>>
Redhat as5安装Mysql5.0.28
查看>>
通过TMG发布ActiveSync
查看>>
Web服务器的配置与管理(4) 配置访问权限和安全
查看>>
点石成金:“硅业报国”不仅是理念
查看>>
联络中心演化的四个特征
查看>>
《SQL与关系数据库理论——如何编写健壮的SQL代码》》一1.4 原始模型回顾
查看>>
云数据中心UPS供电系统需具备的特性
查看>>