語言的黏合劑-SWIG

來源:互聯網
上載者:User
什麼是SWIG?  SWIG,即簡化封裝和介面產生器(Simplified Wrapper and Interface Generator),按照其建立者的說法,是“一種把用C、C++以及Objective-C所寫的程式串連到各種進階程式設計語言的軟體開發工具”。UNIX、Windows以及Macintosh系統都支援SWIG。 對Java程式員來說,SWIG是把C/C++代碼嵌入到Java指令碼的理想工具。SWIG理解C/C++申明,因此它可以解析C/C++標頭檔併產生Java模型並對其進行編碼,編譯之後,你就可以在Java中使用。 SWIG實際上一個“介面檔案”作為輸入,但它是用帶有若干(可選)指示的標準C/C++頭定義所組成的。實際上,如果代碼相當乾淨,你就可以使用標頭檔本身。所產生的代碼是完整的(也就是說,沒有殘留什麼東西讓你必須填寫),而且代碼由Java模型和C實現檔案組成的,它只需要編譯即可。  SWIG 支援的語言 SWIG支援的語言非常的廣泛,幾乎支援目前所有流行的語言,目前支援C/C++轉換的語言有Java/C#/PHP/Python/Perl/Perl5/Ruby/Ocaml/Tcl/Chicken。對各種語言的具體使用方法可以參考使用手冊。 下面以Java為例描述使用SWIG將C++程式整合的過程。(具體的過程SWIG手冊中都有詳細的描述)。  下載安裝SWIG 從官方網站或者開源項目中下載最新的SWIG程式,解壓到本地目錄。  安裝JDK 和添加JNI  從sun的官方網站下載最新的Java JDK和JNI開發包。  使用VS6.0 進行SWIG 配置l          開啟一個新的工程並且通過嚮導建立一個DLL工程。l          向工程中增加一個SWIG的介面檔案(一般以.i結尾,例如example.i),以及SWIG將產生的封裝檔案(ie.example_wrap.c)。注意如果是使用C++為封裝的檔案example_wrap.cxx選擇不同的尾碼,不用擔心封裝檔案沒有存在-vs會自動更新。l          選擇SWIG介面檔案(example.i),按右健,在彈出的菜單中選擇”settings”選項。l          在Description中輸入”SWIG”。l          在Commands文字框中輸入: echo In order to function correctly, please ensure the following environment variables are correctly set: echo JAVA_INCLUDE: %JAVA_INCLUDE%echo JAVA_BIN: %JAVA_BIN% echo SWIG: %SWIG% echo on %SWIG%/swig.exe -c++ -java $(InputPath)”。其中%SWIG%是在環境變數中定義的swig.exe的檔案目錄。l          在Outputs文字框中輸入:$(InputName)_wrap.cxx,表示根據SWIG介面檔案(example.i)產生相應的C++封裝檔案,這裡產生的封裝檔案名稱為:example_wrap.cxx。l          接著選中整個工程然後選中C/C++屬性頁面,選擇”Category”的Preprocessor項。在”Addition include directories”中輸入包含Java和Jni標頭檔的目錄,JAVA_INCLUDE,JAVA_INCLUDE/win32。l          而後選擇Link屬性頁面,選擇”Category”的”General”項。在out put file name中設定輸出DLL檔案的名稱。l          最後在選擇Post-build step屬性頁面,在Post-build command(s)中添加通過javac編譯java檔案的命令: %JAVA_BIN%/javac *.java。l          至此整個設定過程已經完成,需要說明的是,產生的JNI函數介面定義是由SWIG介面檔案(example.i)和方法名稱一起定義的,在介面檔案中由模組名稱:%module example,和C++的方法名稱共同組成。比如在C++中有方法Start(),那麼此時在Jni中是這樣描述的Java_exampleJNI_Start(),如果介面檔案定義該成%module example_test那麼在JNI中的函數介面定義也變為Java_example_testJNI_Start()。同時JNI函數介面的定義也要求調用的Java程式的包結構與之對應。l          編譯運行。  SWIG 資源  官方網站: http://www.swig.org開源項目: http://sourceforge.net/projects/swig/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.