Mac IDEA+CLION jni Hello World
新建一个空的javaweb-jni项目,并在IDEA添加拓展工具:
添加拓展工具:
bash1 2 3
Program: $JDKPath$/bin/javah Arguments: -jni -classpath $OutputPath$ -d ./jni/ $FileClass$ Working directory: $ProjectFileDir$
新建org.javaweb.jni.Test.java:
java1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
package org.javaweb.jni; public class Test { static { System.loadLibrary("test"); } private static native String exec(String cmd); public static void main(String[] args) { System.out.println(exec("123")); } }
生成JNI头文件测试:
成功生成的头文件会存放在当前项目根目录下创建jni目录:
Clion新建C项目:
复制jni.h和jni_md.h到Clion项目目录(jdk1.8.0_144.jdk换成本地的JDK版本):
bash1 2
cd /Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/ cp include/jni.h include/darwin/jni_md.h /Users/yz/CLionProjects/javaweb-jni
复制idea中的org_javaweb_jni_Test.h到Clion目录修改**#include <jni.h>为#include "jni.h"**
新建org_javaweb_jni_Test.c并编译lib库:
编译test库,库名称必须是“lib***.jnilib”。
bash1
gcc org_javaweb_jni_Test.c -shared -fPIC -o libtest.jnilib
复制编译后的test库到java动态链接库:
bash1
cp libtest.jnilib /Users/yz/Library/Java/Extensions/
通过System.getProperty("java.library.path")可以获取链接库目录,也可以自行设置java.library.path的路径。
最后执行Test.java:
注意:JDK10移除了javah,需要改为javac加参数。例如:javac -h -cp jna.jar com/sun/jna/Function.java
参考: