HelloWord.java
public native void displayHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().displayHelloWorld();
}
}
#include </usr/lib/jvm/java-7-openjdk-amd64/include/jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv * env, jobject obj);
#ifdef __cplusplus
}
#endif
#endif
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld
(JNIEnv * env, jobject obj){
printf("Hello World!\n");
return ;
$gcc -c -fPIC -o HelloWorldImpl.o HelloWorldImpl.c
-c表示只編譯(compile),而不連接。-o選項用於說明輸出(output)文件名。gcc將生成一個目標(object)文件HelloWorldImpl.o。
注意-fPIC選項。PIC指Position Independent Code。共享庫要求有此選項,以便實現動態連接(dynamic linking)。
生成共享庫:
庫文件以lib開始。共享庫文件以.so爲後綴。-shared表示生成一個共享庫。
這樣,共享庫就完成了。.so文件和.h文件都位於當前工作路徑(.)。
運行java HelloWorld,就可以看到我們打印的Hello world了。