一直都做Android開發,而且編譯JNI代碼都是用Google提供的NDK,今天做個J2SE平臺的JNI,發現離開Android平臺還多少不習慣了,編譯so庫都弄了半天,記下編譯命令,以備後用。編譯前提安裝JDK和gcc/g++環境,我用的是gcc。步驟如下:
1.編譯Java源代碼
javac FifoTest.java
2. 生成*.H頭文件
javah FifoTest.java
3.實現*.C文件,如FifoTest.c
# coding...
4. 編譯*.c文件生成 *.o文件,這裏注意JDK路徑
gcc -c FifoTest.c -I./ -I/usr/lib/jvm/java-1.6.0-openjdk/include -I/usr/lib/jvm/java-1.6.0-openjdk/include/linux -o fifojni.o
(PS: -I optional with the jdk include file, you can find the include using this "locate include | grep java" to get the location of your jdk include)
#64位需要-fPIC選項
gcc -fPIC -c FifoTest.c -I./ -I/usr/lib/jvm/java-6-sun-1.6.0.26/include -I/usr/lib/jvm/java-6-sun-1.6.0.26/include/linux -o fifojni.o
5. 編譯*.o 文件生成 *.so file
gcc -rdynamic -shared fifojni.o -o libfifo-jni.so