在Mac OS X 下面编译jni动态库


   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$


运行成功!




你可能感兴趣的:(mac,jni,OS,X)