Java??Native??????????
???????????? ???????[ 2016/8/22 9:41:50 ] ??????????????????? Java
???????????? native???? java.lang.Object ????е????hashCode??????
????public native int hashCode();
????????и?native????????????????????????????????????native??
?????????? native ?? JNI??Java Native Interface
??????????????????????????????????????????????????????????д???ɡ?Java???и?????????C??????л???????API?????Java Native Interface (Java??????)??
?????????? Java ???? C ??“Hello??JNI”
????????????????°?????????У?
????1?????????Java?????????????? native ??????????????? loadLibrary??HelloNative.java ???????£?
public class HelloNative
{
static
{
System.loadLibrary("HelloNative");
}
public static native void sayHello();
@SuppressWarnings("static-access")
public static void main(String[] args)
{
new HelloNative().sayHello();
}
}
??????????????????native??????????????????????????á?native ????????????????????JVM?????????÷??????????壬?????????C?????????????????????? JVM??????“A Java Exception has occurred.”???????????£?
????Exception in thread "main" java.lang.UnsatisfiedLinkError: no HelloNative in java.library.path
????at java.lang.ClassLoader.loadLibrary(Unknown Source)
????at java.lang.Runtime.loadLibrary0(Unknown Source)
????at java.lang.System.loadLibrary(Unknown Source)
????at HelloNative.<clinit>(HelloNative.java:5)
???????????????????????????????????????sayHello?????????????д??????????????
????2??????javah??????????÷?????C????????.h
??????HelloNative.java ?????? javac javah?????
?????????????? 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: sayHello
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloNative_sayHello
(JNIEnv *?? jclass);
#ifdef __cplusplus
}
#endif
#endif
????jni.h ??????????/%JAVA_HOME%include
????3????????????дC???????????
?????????????????????sayHello???????£?
????#include "HelloNative.h"
????#include <stdio.h>
????JNIEXPORT void JNICALL Java_HelloNative_sayHello
????{
????printf("Hello??JNI");
????}
????4??????dll????????Java????load?????ü??ɡ?
??????Windows???MinGW GCC ????????
????gcc -m64 -Wl??--add-stdcall-alias -I"C:Program FilesJavajdk1.7.0_71include" -I"C:Program FilesJavajdk1.7.0_71includeincludewin32" -shared -o HelloNative.dll HelloNative.c
????-m64???????dll????64λ?????????? HelloNative??
????java HelloNative
?????????????????????????????£?
????Hello??JNI
????????JNI ???? C ?????
??????
![](/images/ad-banner/ad-banner.png)
???·???
??????????????????
2023/3/23 14:23:39???д?ò??????????
2023/3/22 16:17:39????????????????????Щ??
2022/6/14 16:14:27??????????????????????????
2021/10/18 15:37:44???????????????
2021/9/17 15:19:29???·???????·
2021/9/14 15:42:25?????????????
2021/5/28 17:25:47??????APP??????????
2021/5/8 17:01:11