2018-05-23 08:09:31

Mac IDEA+CLION jni Hello World

新建一个空的javaweb-jni项目,并在IDEA添加拓展工具:


添加拓展工具:

Program: $JDKPath$/bin/javah
Arguments: -jni -classpath $OutputPath$ -d ./jni/ $FileClass$
Working directory: $ProjectFileDir$ 


新建org.javaweb.jni.Test.java:

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版本):

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”。
gcc org_javaweb_jni_Test.c -shared -fPIC -o libtest.jnilib

复制编译后的test库到java动态链接库:
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

参考:


发表回复