Mac下Java JNI 调C
来源:互联网 发布:asp网站源码修改 编辑:程序博客网 时间:2024/06/10 01:09
简介
JNI的实现步骤如下:
- 编写带有native声明的方法的Java类
- 使用javac命令编译编写的Java类
- 使用java -jni className 来生成后缀名为.h的头文件
- 使用其他语言(C、C++)实现本地方法
- 将本地方法编写的文件生成动态链接库
我们开始来编写一个简单的Java call C
1、编写含有native方法的Java类
public class HelloWorld { public native void hello(); static { //设置查找路径为当前项目路径 System.setProperty("java.library.path", "."); //加载动态库的名称 System.loadLibrary("hello"); } public static void main(String[] args) { new HelloWorld().hello(); }}
2、编译代码
在终端执行 : javac HelloWorld.java
这时会生成HelloWorld.class 文件
3、使用java -jni className 生成后缀名为.h的头文件
在终端执行 : java HelloWorld
这时会生成HelloWorld.h 头文件. 此文件内容不能修改。看下它的内容 :
/* DO NOT EDIT THIS FILE - it is machine generated */#include <jni.h>/* Header for class HelloWorld */#ifndef _Included_HelloWorld#define _Included_HelloWorld#ifdef __cplusplusextern "C" {#endif/* * Class: HelloWorld * Method: hello * Signature: ()V */JNIEXPORT void JNICALL Java_HelloWorld_hello (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
4、使用C语言实现本地方法
创建 HelloWorldImpl.c 文件
#include "jni.h"#include "HelloWorld.h"#include <stdio.h>JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){ printf("Hello World!\n"); return;}
5、将本地方法编写的文件生成动态链接库
使用命令生成动态链接库:
gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include HelloWorldImpl.c -o libhello.jnilib
libhello.jnilib 就是生成的动态链接库。但是运行这个命令报错了 :
In file included from HelloWorldImpl.c:1:/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include/jni.h:45:10: fatal error: 'jni_md.h' file not found#include "jni_md.h" ^1 error generated.
提示jni_md.h这个文件找不到;我们执行下面的命令拷贝一份:
sudo cp /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/include
在当前目录下执行 : ls -al
drwxr-xr-x 8 pengwei.xpw staff 272 Sep 10 15:31 .drwxr-xr-x 6 pengwei.xpw staff 204 Jan 8 2017 ..-rw-r--r-- 1 pengwei.xpw staff 567 Sep 10 15:25 HelloWorld.class-rw-r--r-- 1 pengwei.xpw staff 377 Sep 10 15:26 HelloWorld.h-rw-r--r-- 1 pengwei.xpw staff 341 Sep 10 15:25 HelloWorld.java-rw-r--r-- 1 pengwei.xpw staff 174 Sep 10 15:26 HelloWorldImpl.cdrwxr-xr-x 3 pengwei.xpw staff 102 Nov 1 2016 com-rwxr-xr-x 1 pengwei.xpw staff 8400 Sep 10 15:31 libhello.jnilib
6、last, 执行可执行文件
终端执行 : java HelloWorld
结果:
Hello World!
阅读全文
0 0
- Mac下Java JNI 调C
- Mac下Java JNI 调C
- Mac OS X 下编译jni动态库(java调用C++)
- Mac下Java的native方法以及JNI调用C语言
- Mac下java 调用C
- Mac Java Jni 调用
- Java JNI Mac
- mac下 JNI-Hello world
- mac编译jni 调用java
- [zz]一个JNI下c和java程序范例
- ubuntu下,C/C++通过JNI调用 JAVA类
- linux下 java JNI调用C语言动态链接库
- 一个JNI下c和java程序范例
- linux下 java JNI调用C语言动态链接库
- linux下 java JNI调用C语言动态链接库
- Android下用JNI让Java调用C函数
- linux下java 调用 c jni 实现 HelloWorld
- Windows下使用Java Jni调用C/C++初探
- POJ 2255 Tree Recovery
- linux下安装python环境
- Android的Handler消息传递机制
- centos 安装单机版 redis 补充
- 老人的品质
- Mac下Java JNI 调C
- 二、Jenkins系列_tomcat中增加jenkins的启动内存
- Makefile基础教程 7
- 详解spl_autoload_register()
- NYOJ 11
- 使用DevExpress官方汉化文
- 非正常关闭vi编辑器后提示错误的解决方法
- 启动Eclipse 报错:java was started but returned exit code = 1
- Head First设计模式之解释器模式