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

本文共 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

你可能感兴趣的文章
智能设备:用户隐私丛林,恶意应用淘金地
查看>>
Hadoop入门扫盲:hadoop发行版介绍与选择
查看>>
实战1:创建Windows Server 2008域
查看>>
在 Windows 2012 R2 安装 SharePoint 2013
查看>>
《统一沟通-微软-实战》-6-部署-5-边缘服务器-2012-07-12-3
查看>>
活动目录域控制器最长可以离线多久?
查看>>
红帽转型为云计算解决方案提供商
查看>>
疯狂ios之cocos2d中的文本
查看>>
Mac下通过 brew 安装不同版本的php
查看>>
云在天之南——我的七天七夜(率性苍山洱海)
查看>>
如何迅速入门Shell 编程
查看>>
Linux企业应用微博客正式开通
查看>>
64位linux下的gns3网络模拟器配置
查看>>
效果差学费贵售后难,VIPKID米雯娟的野心不能只靠“烧钱”营销
查看>>
Windows Server 2012 R2 WSUS-10:流程概述
查看>>
自动发现服务是怎样工作的?
查看>>
Office 365 系列之七:安装Office 365 ProPlus
查看>>
闲诗一首:《莫追梦》
查看>>
Cisco/H3C交换机配置与管理完全手册(第2版)卓越网正式到货
查看>>
让VMware ESX中的虚拟机随esx开机自动启动
查看>>