1、创建一个HelloWorld.java文件,mac下通过“文本编辑”新建一个文件再保存。
class HelloWorld {
//本地化函数声明,只声明不定义,main函数里直接调用
public native void displayHelloWorld();
static {
//加载C模块,window下是hello.dll文件,mac下是libhello.jnilib文件
//由下面的操作生成
System.loadLibrary("hello");
}
public static void main(String[] args)
{
//调用上面声明的本地化方法
new HelloWorld().displayHelloWorld();
}
}
2、打开终端,cd到HelloWorld.java文件所在目录,执行
javac HelloWorld.java
命令,生成HelloWorld.class 文件。
3、执行
javah HelloWorld
命令,生成HelloWorld.h文件,该文件不作修改。
打开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 __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
4、复制HelloWorld.h,重命名为HelloWorldImpl.c,或者直接创建一个文件,命名为HelloWorldImpl.c(保存成cpp也可以,下面的编译名字也由.c改成.cpp)
修改内容如下:
#include "jni.h"
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello World print!\n");
return;
}
注意函数定义与头文件里的保持一致。
5、执行命令
gcc -I/System/Library/Frameworks/JavaVM.framework/Headers -c HelloWorldImpl.c
看到输出了c文件里定义的Hello World print!
--------------------------------------------------以上是java调用c--------------------------------------------------
如果是C调用java的方法,则需要用到JniHelper比较方便。待补充
注:终端编译java的时候如果出错,有汉字错误提示,但终端里显示的都是乱码,无法看清错误信息,解决办法:
1、下载Iterm
听说Iterm是一个更强大的终端。安装好后打开Iterm进行上述操作之前,需进行如下设置:
点击Preferences,然后进行如下图操作:
在ITerm里进行前面步骤,即可。
本文得益于:
http://ikinglai.blog.51cto.com/6220785/1212481
等。