Mac IDEA+CLION jni Hello World

yzmm
7017 阅读
0 评论

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

img

添加拓展工具:

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

img

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

java
1
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头文件测试:

img

成功生成的头文件会存放在当前项目根目录下创建jni目录:

img

Clion新建C项目:

img

复制jni.h和jni_md.h到Clion项目目录(jdk1.8.0_144.jdk换成本地的JDK版本):

bash
1
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"**

img

新建org_javaweb_jni_Test.c并编译lib库:

img

编译test库,库名称必须是“lib***.jnilib”。

bash
1
gcc org_javaweb_jni_Test.c -shared -fPIC -o libtest.jnilib

复制编译后的test库到java动态链接库:

bash
1
cp libtest.jnilib /Users/yz/Library/Java/Extensions/

通过System.getProperty("java.library.path")可以获取链接库目录,也可以自行设置java.library.path的路径

最后执行Test.java

img

注意:JDK10移除了javah,需要改为javac加参数。例如:javac -h -cp jna.jar com/sun/jna/Function.java

参考:

https://blog.csdn.net/huachao1001/article/details/53906237

评论 (0)

发表评论