語言的黏合劑-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/