Java JNI使用

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)

根据这个网址的方式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

区别就在于第三第四个命令行(第三行的路径是我电脑上的jni.h的路径地址),而且使用后一种方式竟然不用指定搜索路径(疑惑),如果有大神知道什么原因,望指点一二。不甚感激

JNI官方文档翻译 http://blog.csdn.net/mtaxot/article/details/51422690
Android JNI原理分析 http://gityuan.com/2016/05/28/android-jni/

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,837评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,861评论 25 708
  • 北方的腊月冰天雪地 ,手拿出一两分钟就被冻的像猫挠的那样疼,真叫一个冷。路上的雪被行人和车辆压得结结实...
    A秋风送爽阅读 121评论 2 2
  • 前几日,表姐跟我说她儿子(我外甥)今年读高一,要分文理科了,问我有没有什么建议。我的思维一下子回到了十年前。 那年...
    MardaWang阅读 511评论 0 4
  • 现成写一个总结吧:目前已提升能力(所拥有的):倾听,沟通。主要表现在和同事相处融洽的人际交往关系当中。善于发现需求...
    白色蔷薇香阅读 253评论 0 0