瞭解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