JNI學習一:編寫HelloWorld程式

來源:互聯網
上載者:User

轉載請說明出處~

原文連結:http://blog.csdn.net/zgyulongfei/article/details/7390658


本文教程翻譯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();//調用對象方法printhelloWorld.print();}//類裝載器,在類被使用時候載入static{System.loadLibrary("HelloWorld");}}

2、編譯HelloWorld.java產生HelloWorld.class



3、建立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 __cplusplusextern "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 <jni.h>#include <stdio.h>#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!咯~~


本次學習源碼下載連結,請點擊這裡!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.