jni是java与c/c++使用的一套方法,网上教程很多,在windows下,linux下也做过相关练习,osx下倒是第一次,写一下具体过程。
static{
}
publicnative void DisplayHello();
publicstatic void main(String[] args) {
}
}
(JNIEnv *, jobject);
(JNIEnv *, jobject)
首先写代码:
package com.magic.jni;
public class HelloWorld {
System.loadLibrary("Hello");
new HelloWorld().DisplayHello();
例子程序,照抄网上一篇文章~~
首先编译一下
javac HelloWorld.java
得到.class文件。
然后返回最上层com同级目录下,执行
javah -jni com.magic.jni.HelloWorld
会得到com_magic_jni_HelloWorld.h文件
内容如下:
#include <jni.h>
#ifndef _Included_com_magic_jni_HelloWorld
#define _Included_com_magic_jni_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
JNIEXPORT void JNICALLJava_com_magic_jni_HelloWorld_DisplayHello
#ifdef __cplusplus
}
#endif
#endif
好了,现在可以写cpp文件了:
#include <jni.h>
#include <stdio.h>
#include "com_magic_jni_HelloWorld.h"
JNIEXPORT void JNICALLJava_com_magic_jni_HelloWorld_DisplayHello
{
printf("Hello World!(from jni)\n");
}
可以编译了,命令如下:
g++ -dynamiclib -framework JavaVM-I/System/Library/Frameworks/JavaVM.framework/Versions/A/Headers -olibHello.jnilib com_magic_jni_HelloJni.cpp
得到
libHello.jnilib
文件,这个就是java代码中要加载的库。
现在可以执行一下class文件了,执行
sunnymatoMac-mini:test sunny$ javacom.magic.jni.HelloWorld
Hello World!(from jni)
sunnymatoMac-mini:test sunny$