<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    J2EE 學習

    java struts1、struts2 spring hibernate freemarker ajax fckeditor Mysql MSSQL ORACLE DB2 Websphere jboss
    隨筆 - 11, 文章 - 13, 評論 - 2, 引用 - 0
    數據加載中……

    [JNI] Eclipse直接完成JAVA調用C/C++ (Eclipse上使用CDT結合MinGW)


    看到其他人的在eclipse上調用C/C++ ,這個方法不錯,所以摘錄了這個人的方法:
        

    網上都有很多在windows平臺下JAVA調用C/C++方法的介紹說明。但是,在此過程中,絕大多數都是利用VC等其他工具來進行DLL的生成。試想一下,在eclipse平臺開發了JAVA,突然又要打開VC的工作環境,多不爽!何況如果內存不夠的話,還得先把其中一個退出。到需要再重新打開,多費勁啊!!現在,我們讓這一系列的工作都在eclipse上完成!

     

    首先、安裝eclipse3.2。

    這個安裝過程我就不在這里介紹了,大家都懂。

     

    第二、安裝MinGW。

    1.用戶可以直接登陸以下地址下載MinGW http://prdownloads.sourceforge.net/mingw/MinGW-5.0.3.exe

    2. 鼠標雙擊執行安裝文件,選擇“Download and Install”,下一步

    3.選擇軟件安裝的版本,這里我們選擇“Candidate”,下一步

    4.選擇安裝的編譯器

       1) g++ compiler

       2) g77 compiler

       3) Objective C Compiler

       4) MinGW Make

       下一步

    5. 選擇安裝路徑,下一步

       這里用默認路徑C:\MinGW

    6.  等待下載軟件版本及安裝。安裝會自動完成,但是你要保證你的網絡是可用的。

     

    第三、MinGW的環境變量設置

    1. 系統變量里面的Path添加“MinGW安裝目錄\bin;(例如;C:\MinGW\bin;)

    2. 系統變量里添加 C_INCLUDE_PATH,值為:C:\MinGW\include

    3. 系統變量里添加 CPLUS_INCLUDE_PATH,值為:C:\MinGW\include\c++\3.4.2;C:\MinGW\include\c++\3.4.2\mingw32;C:\MinGW\include\c++\3.4.2\backward;C:\MinGW\include     (這里要注意你的版本號哦)

     

    第四、做一個小技巧修改

       先將MinGW安裝目錄\bin底下的 mingw32-make.exe復制一份副本,將副本更名為make.exe (因為eclipse默認用了make,不是mingw32-make,當然,你也可以修改eclipse的設定,自己喜歡吧)。

     

    第五、安裝CDT插件。

    1、 Eclipse的網站上面找到CDT插件的壓縮包,然后下載至電腦硬盤上;

       下載地址:(http://www.eclipse.org/cdt/downloads.php )

    2、就像你安裝其他安裝插件一下的方式安裝CDT插件吧。怎么安裝不是關鍵問題,按你喜歡,能用就可以了。

     

    第六、簡單介紹CDT的使用吧。

    1.  新建一個C++項目 點擊菜單欄上的 File / New / Standard Make C++ Project

       如果想建立一個C項目則選擇Standard Make C Project;

    2.  輸入New Project名字,直接按Finish完成Project添加

    3. 給項目新建一個的源文件,點擊菜單欄上的 File / New / File

    4. 接著出現文件添加的窗口,在File Name欄里面寫上文件名

      C++的源文件后綴名為cpp hello.cpp

       C的源文件后綴名為c hello.c

    5.

    編輯剛剛添加的hello.cpp 文件,添加一段C++的代碼,內容如下:

    #include <iostream>
    using namespace std;  
      
    int main()  
    {  
        cout
    <<"hello world!!\n";  
        
    return 1;
    }
     

    若你新建的項目為C的話,則需添加相應的C代碼,內容如下:

    #include "stdio.h"
    int main(){
       printf(
    "Hello world!\n");
       
    return 1;
    }

    添加一個編譯命令

    Target Name:MAKE FILE

    Builder Command:g++ hello.cpp -g -o run

    這里如果是c環境就改成gcc hello.c -g -o run

    雙擊MAKE FILE,此時Eclipse在項目文件的根目錄創建一個run.exe的文件,此文件根據hello.cpp代碼編譯生成。

    雙擊run.exe可以預覽效果,控制臺輸出結果:Hello world!

    第七、讓我們開始進入真正的工作吧!

    The Java side

    1.建立Java工程JavaHello,編寫java

    // Hello.class ,這里主要包名,因為后面的函數命名同包名也有聯系的。

    package test;
    class Hello
    {
        
    public native void sayHello();
        
    static
        
    {
            System.loadLibrary(
    "hello");
        }

        
    public static void main(String[] args)
        
    {
            Hello h 
    = new Hello();
            h.sayHello();
        }

    }

     

    2.用命令生成頭文件

    bin目錄下建立批處理文件,名稱隨意,用bat作為擴展名就行了。這里命名為run.bat

    內容為:

    set java_home=F:\dev-software\dev-soft\jdk\jdk1.5.0
    set path
    =%java_home%\bin
    set class_path
    =%java_home%\lib;%java_home%\lib\dt.jar;%java_home%\lib\tools.jar
    javah 
    -jni test.Hello
    @pause

    保存,執行(可以雙擊執行,也可在eclipse的“Run As”調用bat批處理文件來執行),則在bin目錄下生成test_Hello.h 文件。內容為:

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

    #ifndef _Included_test_Hello
    #define _Included_test_Hello
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     test_Hello
     * Method:    sayHello
     * Signature: ()V
     
    */

    JNIEXPORT 
    void JNICALL Java_test_Hello_sayHello
      (JNIEnv 
    *, jobject);

    #ifdef __cplusplus
    }

    #endif
    #endif

    The C sideCompiling the Library

    1.建立標準C工程Cpro,并生成dll文件

    1 將生成的頭文件test_Hello.h拷貝到C工程Cpro

    2 編寫CHello.c,內容為:

    #include <jni.h>
    #include 
    "test_Hello.h"
    #include 
    <stdio.h>
    JNIEXPORT 
    void JNICALL Java_test_Hello_sayHello
    (JNIEnv 
    *env, jobject obj)
    {
    printf(
    "Hello world !\n");
    return;
    }

    3 C工程Cpro下建立hello.def文件(用于定義導出的函數),內容為:

    EXPORTS
    Java_test_Hello_sayHello

    4)在C工程Cpro下建立makefile文件,內容為:

    step1:
        gcc 
    --I"F:\dev-software\dev-soft\jdk\jdk1.5.0\include" -I"F:\dev-software\dev-soft\jdk\jdk1.5.0\include\win32" -o hello.o Hello.c
    step2:
        gcc 
    -shared -o hello.dll hello.o hello.def

    5) Make Targets視圖下,為Cpro工程添加兩個Make Target(對應makefile文件的內容),如下圖:

    6 Make Targets視圖下雙擊step1,在C工程Cpro生成hello.o 文件。

    7)  Make Targets視圖下雙擊step1,在C工程Cpro生成hello.dll 文件。

    JAVA調用DLL

    1.  hello.dll拷貝到Java工程JavaHello下。

    2.  運行Hello.java,則可以看到輸出結果:

    Hello world!

     

    注:如果上面不是C工程而是是C++工程

    1 Hello.c改為Hello.cpp

    2 makefile內容改為:

     

    step1:
        g
    ++  --I"F:\dev-software\dev-soft\jdk\jdk1.5.0\include" -I"F:\dev-software\dev-soft\jdk\jdk1.5.0\include\win32" -o hello.o Hello.cpp
        
    step2:
        g
    ++ -shared -o hello.dll hello.o hello.def
    3) 其他的幾乎都不用改變也可以。

    posted on 2008-12-19 11:38 李峰 閱讀(291) 評論(0)  編輯  收藏


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 免费在线观看亚洲| 亚洲美免无码中文字幕在线| WWW国产亚洲精品久久麻豆| 麻豆最新国产剧情AV原创免费| 亚洲一区二区成人| 久久国产免费福利永久| 亚洲婷婷天堂在线综合| 免费A级毛片无码无遮挡内射| 亚洲国产成人精品无码区在线秒播| 巨波霸乳在线永久免费视频| 久久亚洲精品无码VA大香大香| 精品无码人妻一区二区免费蜜桃| 亚洲精品午夜在线观看| 成人福利免费视频| 亚洲色在线无码国产精品不卡| 日本免费人成黄页在线观看视频| 青娱乐在线免费观看视频| 日日噜噜噜噜夜夜爽亚洲精品| 国产色爽免费无码视频| 亚洲综合成人网在线观看| 亚洲精品免费网站| 亚洲大码熟女在线观看| 亚洲欧洲中文日韩av乱码| 中文字幕av无码不卡免费| 亚洲AV日韩精品久久久久久 | 久久午夜羞羞影院免费观看| 亚洲欧洲国产综合| 国产免费观看视频| 中文字幕免费在线视频| 亚洲视屏在线观看| 国产免费131美女视频| 97在线视频免费公开视频| 亚洲另类春色国产精品| 国产免费观看黄AV片| 国产午夜成人免费看片无遮挡 | 亚洲人成在线中文字幕| 免费观看四虎精品国产永久| 免费在线中文日本| 亚洲精品无码国产片| 久久综合九九亚洲一区| 四虎影院免费在线播放|