javac JniTest.java -d .
javah -classpath . -o JniTest.h com.apple.cai.JniTest
g++ -dynamiclib -o JniTest.jnilib JniTest.cpp -framework JavaVM -I/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include/darwin
java -Djava.library.path=/Users/apple/JavaProjects -classpath . com.apple.cai.JniTest
使用以上方式運行就是一直報異常,一直找不到原因
Exception in thread "main" java.lang.UnsatisfiedLinkError: no JniTest in java.library.path
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1886)
at java.lang.Runtime.loadLibrary0(Runtime.java:849)
at java.lang.System.loadLibrary(System.java:1088)
at JniTest.<clinit>(JniTest.java:7)
根據(jù)這個網(wǎng)址的方式http://mrjoelkemp.com/2012/01/getting-started-with-jni-and-c-on-osx-lion/
竟然可以了
javac HelloWorld.java
javah -jni HelloWorld
g++ -I/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include -I/Library/Java/JavaVirtualMachines/jdk1.7.0_80.jdk/Contents/Home/include/darwin -c HelloWorld.cpp
g++ -dynamiclib -o libhelloworld.jnilib HelloWorld.o
java HelloWorld
區(qū)別就在于第三第四個命令行(第三行的路徑是我電腦上的jni.h的路徑地址),而且使用后一種方式竟然不用指定搜索路徑(疑惑)既琴,如果有大神知道什么原因鞭莽,望指點一二物延。不甚感激
JNI官方文檔翻譯 http://blog.csdn.net/mtaxot/article/details/51422690
Android JNI原理分析 http://gityuan.com/2016/05/28/android-jni/