SWIG: 為你最喜愛的 scripting 語言外掛模組
我們喜歡用 perl, tcl, python 等等 scripting languages 來解決日常遇到的問題, 因為用這些語言寫程式比較快 (節省程式設計師的時間); 另一方面, C 與 C++ 這類低階語言則有 (1) 執行速度快 (2) 既有的程式庫豐富 這兩個優點. 魚與熊掌, 可否兼得呢?
SWIG (Simplified Wrapper and Interface Generator) 可以讓我們把既有的或自己寫的 C/C++ 副程式庫很容易地變成這些 scripting languages 的外掛模組.
以下以 CLE 0.8 為例, 說明如何上手及會遇到那些問題:
- 照著手冊 Introduction 一文當中的範例做.
-
不論是製作 tcl, perl, 或 python 的模組, 都可以用下列的命令:
swig -lang example.i gcc -c -fpic example.c example_wrap.c -Iinclude_path gcc -shared example.o example_wrap.o -o example.so
其中 lang 為 tcl8, perl5, 或 python; 而 include_path 則視該語言的 header files 的安裝路徑而定. 可以用 rpm -ql perl 或 rpm -ql python-devel 來查. - 編譯 perl 模組時, 可能會出現很多錯誤訊息. 我的解決方式: 在
example_wrap.c 的最上面加上一句:
typedef int bool;
撰寫 C 函式庫的注意事項
- 字元, 整數, 浮點數的轉換都很直覺.
- 字串參數最好都是 char const * 也就是說你的 C 函數應該只讀出不寫入它的字串參數.
- Swig 遇到指標就直接傳, 不去打開裡面來看.
- 複雜的東西都用指標傳入傳出.
- 可在 .i 檔內加上 %init ... 做一些初始設定.
- 如果要傳入/傳出結構, 可以考慮用簡單的 typemap
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/mi/swig.php; 您所看到的版本: February 14 2012 10:32:25.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。