mac os x编译jni动态库和linux类似,但是有些地方不太一样,下面简单的介绍一下。
1. 编写java文件
public class HelloWorld
{
public native String printHelloWorld();
static{
System.loadLibrary("helloworld");
}
public static void main(String[] args)
{
HelloWorld h = new HelloWorld();
String str = h.printHelloWorld();
System.out.println(str);
}
}
2. javac HelloWorld.java 生成HelloWorld.class文件
3. javah HelloWorld 生成HelloWorld.h 头文件
4. 编写HelloWorld.c文件
#include "HelloWorld.h"
JNIEXPORT jstring JNICALL Java_HelloWorld_printHelloWorld
(JNIEnv *env, jobject obj)
{
return (*env)->NewStringUTF(env, "Hello World from JNI !");
}
5 编译HelloWorld.c
gcc -I/System/Library/Frameworks/JavaVM.framework/Headers -c HelloWorld.c
编译完成后,会生成HelloWorld.o文件
注意:/System/Library/Frameworks/JavaVM.framework/Headers 这个是你的jdk头文件的目录,主要是编译的时候要查找jni.h头文件。
6 将HelloWorld.o打包成动态库
gcc -dynamiclib -o libhelloworld.jnilib HelloWorld.o
可以看出在mac下面,不是生成so文件,而是.jnilib文件。
7 运行
java HelloWorld
hejinlai_iMac:jni hejinlai$ java HelloWorld
Hello World from JNI !
hejinlai_iMac:jni hejinlai$
运行成功!
本文出自 “移动开发” 博客,请务必保留此出处http://ikinglai.blog.51cto.com/6220785/1212481