瞭解SWIG的用法。

軟體修正 :

NetBeans

為NetBeans安裝python的附加元件,使其可以編譯python文件。

這些附加元件還包含了jython2.7.0。

SWIG

上次載的版本沒有Windows使用的可執行檔,需要從原始code編譯太麻煩了,所以從以下網址下載了Windows使用的版本。

https://sourceforge.net/projects/swig/files/swigwin/

解壓縮後就有可執行檔了,再把它的所在目錄加入start.bat的環境參數中。

接著就能用它下參數了。


SWIG簡介 :

SWIG的功能就是利用自己的Interface檔案".i",產生出一個"_wrap.c"檔,如果DLL專案一起將這個".c"編譯的話,就可以讓其他高階語言呼叫了。

SWIG內有個\Examples資料夾,裡面有所有支援語言的轉換函式,參照它們的格式來撰寫自己的Interface,放在專案中。

諸如:D語言、java、javascript、lua、php、python、ruby。


練習應用 :

參考範例:

/Examples/python/simple/index.html

先寫一個".c"程式碼。

/* File : example.c */

/* A global variable */
double Foo = 3.0;

/* Compute the greatest common divisor of positive integers */
int gcd(int x, int y) {
  int g;
  g = y;
  while (x > 0) {
    g = x;
    x = y % x;
    y = g;
  }
  return g;
}

然後再寫一個Interface的".i"文件。

至於格式可能要參考手冊的其他內容。

/* File: example.i */
%module example

extern int gcd(int x, int y);
extern double Foo;

然後用cmd到/Examples/python/simple中下指令:

swig -python example.i

然後simple資料夾中就會產生example_wrap.c與example_wrap.py檔,再拿進編譯器Build。

但是Netbeans卻無法編譯檔案,照常來說最新的SWIG已經支援到Python 3.5,還是說有參數需要調整。

而且在動態連結庫的專案中,不知道怎麼調Build的參數成為pyd檔。


SWIG的操作大致知道了,但是仍有些許不瞭解的地方。

像是Interface的檔案撰寫,有將網路上一些範例存起來,但是下swig的指令時就出現".i"文件格式錯誤的訊息。

而在Netbeans裡要如何設定gcc編譯成pyd呢?在CMD裡下了跟2015cp.leo按鈕一樣的參數,可是好像都會出現上面Build的錯誤。

另外,按照SWIG的邏輯,萬一使用者的Python版本比它還低,它會修改編譯語法嗎?覺得在編譯時的錯誤可能是3.4到3.5之間的衝突。


今天上網找資料的時候,發現了ctype,可以讓python直接讀取DLL的文件,好像是SWIG之後的產物,只是Python本身必須加裝模組。


Comments

comments powered by Disqus