java使用本地方法加载dll,打印Hello Native World!

1,创建java文件

class HelloNative{
    public static native void hello();
}

2,javac -h . HelloNative.java
生成HelloNative.h文件

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

#ifndef _Included_HelloNative
#define _Included_HelloNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     HelloNative
 * Method:    hello
 * Signature: ()V
 */
JNIEXPORT void JNICALL Java_HelloNative_hello
  (JNIEnv *, jclass);

#ifdef __cplusplus
}
#endif
#endif

3 ,创建HelloNative.c文件

#include "HelloNative.h"
#include <stdio.h>

JNIEXPORT void JNICALL Java_HelloNative_hello(JNIEnv* env, jclass cl){
    printf("Hello Native World!\n");
}

4 ,gcc -Wl,–add-stdcall-alias -shared -o HelloNative.dll HelloNative.c生成dll文件
5,System.load()加载dll,调用本地方法

public class HelloNative {
    public static native void hello();
    public static void main(String[] args) {
        hello();
    }
    static {
        try {
            System.load("D:\\Projects\\app\\HelloNative.dll");
            System.out.println("ok");
        } catch (UnsatisfiedLinkError e) {
            System.err.println("Native code library failed to load.\n" + e);
            System.exit(1);
        }
    }
}

运行

D:\Software\Java\jdk1.8.0_201\bin\java.exe -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:9585,suspend=y,server=n -javaagent:D:\Software\IDEA\plugins\java\lib\rt\debugger-agent.jar -agentpath:C:\Users\H\AppData\Local\Temp\memory_agent.dll= -Dfile.encoding=UTF-8 -classpath D:\Software\Java\jdk1.8.0_201\jre\lib\charsets.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\deploy.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\access-bridge-64.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\cldrdata.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\dnsns.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\jaccess.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\jfxrt.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\localedata.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\nashorn.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\sunec.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\sunjce_provider.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\sunmscapi.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\sunpkcs11.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\ext\zipfs.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\javaws.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\jce.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\jfr.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\jfxswt.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\jsse.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\management-agent.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\plugin.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\resources.jar;D:\Software\Java\jdk1.8.0_201\jre\lib\rt.jar;D:\Projects\app\out\production\app;D:\Software\IDEA\lib\idea_rt.jar HelloNative
Connected to the target VM, address: '127.0.0.1:9585', transport: 'socket'
ok
Disconnected from the target VM, address: '127.0.0.1:9585', transport: 'socket'
Hello Native World!

Process finished with exit code 0

依赖文件 jni_md.h jni.h jdk目录下include目录
c编译器使用mingw64 版本gcc version 8.1.0 (x86_64-posix-seh-rev0, Built by MinGW-W64 project)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值