java jni helloword_JNI学习一:编写HelloWorld程序
轉載請說明出處~
本文教程翻譯jni官方文檔的部分內容。
要查看Jni官方文檔,請點擊這里
先感嘆一下時光如水,歲月不留人哇有木有!!!認真想想在XMU的這三年,真的改變了我好多。
我還清楚地記得學習C語言寫的第一個程序就是Hello,world!
那個時候對編程語言真是一竅不通,不過也正是從那個時候開始,對編程產生了興趣~
閑話不多說,既然是入門教程,我們就從簡單的Hello,world開始。
這個程序使用java代碼調用C函數來輸出Hello,world.
步驟如下:
1、? 創建一個HelloWorld.java類,并在類中聲明native方法
2、? 利用javac命令編譯HelloWorld.java產生HelloWorld.class
3、? 利用javah –jni命令產生C頭文件HelloWorld.h,該頭文件為native方法的實現提供了函數原型。
4、? 寫出native方法HelloWorld.c
5、? 將HelloWorld.c編譯成native類庫,可以創建HelloWorld.dll或HelloWorld.so
6、? 運行HelloWorld程序,HelloWorld.class與(HelloWorld.so/HelloWorld.dll)會在運行時候被加載
流程圖:
實踐才能出真知,下面我們正式開始啦~
注:本人操作系統為Windows 7
1、在F盤創建目錄【HelloWorld】,然后編寫HelloWorld.java
public class HelloWorld {
//聲明本地方法print()
public native void print();
public static void main(String[] args) {
//創建一個HelloWorld對象
HelloWorld helloWorld = new HelloWorld();
//調用對象方法print
helloWorld.print();
}
//類裝載器,在類被使用時候加載
static{
System.loadLibrary("HelloWorld");
}
}
2、編譯HelloWorld.java生成HelloWorld.class
3、創建HelloWorld.h文件
查看該頭文件內容
/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
看到聲明的方法了嗎?沒錯,就是它——Java_HelloWorld_print(JNIEnv*,jobject);
第一個參數是JNIEnv的接口指針,第二參數是HelloWorld對象的引用,類似于C++中的this指針。
注:JNIEXPORT和JNICALL兩個宏命令可以無視之~
【Java代碼】通過這個【函數接口】來調用底層【C代碼】
4、編寫HelloWorld.c實現這個方法
#include
#include
#include "HelloWorld.h"
JNIEXPORT void JNICALL Java_HelloWorld_print(JNIEnv *env, jobject obj)
{
printf("yulongfei says:");
printf("Hello, world!\n");
return;
}
5、將HelloWorld.c編譯為native類庫
由于我是windows 7操作系統,所以編譯成HelloWorld.dll庫,這里需要使用工具Visual Studio 2008
操作步驟:
Step 1:啟動VS2008 --> 文件 --> 新建項目 --> Visual c++ --> Win32控制臺應用程序
Step 2: 名稱輸入HelloWorld,程序保存路徑你自己定,,點擊確定
Step 3:在向導中選擇【下一步】。在應用程序類型中,選擇【DLL】;在附加選項中,選擇【空項目】。選擇【完成】
Step 4: 打開資源管理器,將HelloWorld.h復制到【頭文件】中,將HelloWorld.c復制到【源文件】中。
Step 5: 選中菜單欄的【生成】-->【生成HelloWorld】;或者直接按下快捷鍵Shift+F6
注:如果報錯
請你定位到jdk安裝目錄下,然后將【include\jni.h】以及【include\win32\jawt_md.h】和【include\win32\jni_md.h】這三個文件拷貝到你VS安裝目錄的VC\include下,我的是D:\ProgramFiles\Microsoft Visual Studio 9.0\VC\include。
Step 6: 定位到VS2008剛剛建立的HelloWorld工程目錄下,將Debug目錄下的HelloWorld.dll 拷貝到F盤【HelloWorld】的目錄下,接下來就可以運行程序了。
6、運行程序
哈哈,開心吧,成功輸出:Hello, world!咯~~
本次學習源碼下載鏈接,請點擊這里!
總結
以上是生活随笔為你收集整理的java jni helloword_JNI学习一:编写HelloWorld程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java boolean 多线程_JAV
- 下一篇: python数据类型总结_Python