首页 > 系统服务 > 详细

Mac下jni调用

时间:2021-09-02 05:56:08      阅读:8      评论:0      收藏:0      [点我收藏+]

?

MacOS 

编写HelloWorld.java

public class HelloWorld {

    public native void hello();

    static {
        //设置查找路径为当前项目路径
        System.setProperty("java.library.path", ".");
        //加载动态库的名称
        System.loadLibrary("hello");
    }

    public static void main(String[] args) {
        new HelloWorld().hello();
    }
}
技术分享图片

javac HelloWorld.java

编译生成.class

javah  HelloWorld

自动生成HelloWorld.h文件,内容为:

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */

#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloWorld
 * Method:    hello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloWorld_hello
  (JNIEnv *, jobject);

#ifdef __cplusplus
}
#endif
#endif
技术分享图片

 

编写c文件:HelloWorldImpl.c

#include "jni.h"
#include "HelloWorld.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_HelloWorld_hello(JNIEnv *env,jobject obj){
    printf("Hello World!\n");
    return;
}
技术分享图片

在mac下动态链接库是.jnilib 

在此将c文件生成为文件:libhello.jnilib

生成动态链接库命令:

gcc -dynamiclib -I /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/include HelloWorldImpl.c -o libhello.jnilib

技术分享图片

会报错:

技术分享图片?

技术分享图片

复制该文件到include目录下:

sudo cp /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/include/darwin/jni_md.h /Library/Java/JavaVirtualMachines/jdk1.8.0_211.jdk/Contents/Home/include
技术分享图片

 

重新执行生成动态链接库

 

运行java

java HelloWorld

输出:Hello World!

 

最后:

只剩下class和jnilib文件即可调用成功,两个文件任何文件改名都报异常

技术分享图片?

技术分享图片

修改动态链接库文件名:

技术分享图片?

技术分享图片

?

Mac下jni调用

原文:https://www.cnblogs.com/sewell/p/15212286.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!