1、安裝swig
下載鏈接: http://www.swig.org/survey.html
tar -xvf swig-3.0.12.tar.gz
./configure --prefix=/usr/localswig(此處指定安裝目錄,不指定默認直接默認系統路徑)
make && make install
注意:如果在第二步中不成功,可能是沒有安裝pcre庫,安裝pcre步驟如下:
pcre下載鏈接:http://www.pcre.org/
tar -xzvf pcre-8.21.tar.gz cd pcre-8.21 ./configure && make && make install
之后,再來測試swig是否安裝成功,使用下面語句:
swig -version
可能會報“找不到libpcre.so.1的錯誤”,解決辦法如下,建立軟連接:
sudo ln -s /pcre-8.21/.libs/libpcre.so.0.0.1 /usr/lib/libpcre.so.1
2、建立接口
以一個簡單的小程序為例:
(1)編輯頭文件和源文件
//mytest.h int add(int a,int b); int sub(int a,int b);
//test.cpp int add(int a, int b){ return a+ b;} int sub(int a,int b){ return a - b;}
(2)編輯對應的.i文件
//%module 后面的名字是被封裝的模塊名稱。封裝口,python通過這個名稱加載程序 //%{ %}之間所添加的內容,一般包含此文件需要的一些函數聲明和頭文件。 //最后一部分,聲明了要封裝的函數和變量,直接使用%include 文件模塊頭文件直接包含即可 //file mytest.i %module mytest %{ #define SWIG_WITH_INIT #include "mytest.h" %} %include "mytest.h "
(3)執行命令編輯.i文件
swig -python -c++ mytest.i
執行完成之后會生成對應的文件: 模塊名_warp.cxx(這里就是mytest_warp.cxx)
(4)編寫setup.py文件
from distutils.core import setup from distutils.extension import Extension test_module = Extension('_mytest', sources=['mytest_wrap.cxx', 'mytest.cpp'],) setup(name = 'mytest', version = '0.1', author = 'SWIG Docs', description = 'Simple swig pht from docs', ext_modules = [test_module], py_modules = ['mytest']
執行該setup.py文件
python setup.py build
執行完之后會在同級目錄的build文件夾的lib文件夾下生成對應的.so文件和mytest.py文件;
之后要注意:要在這個目錄下編寫調用這個C++模塊的py腳本!!!因為執行完setup.py之后在setup.py的同級目錄下也會生成一個mytest.py文件,但沒有對應的.so文件,直接在這個里面編寫py腳本進行調用的話會由於沒有動態鏈接庫而報錯!!!
(5)編寫python腳本調用C++
import mytest a = mytest.add(1, 2) print(a) b = mytest.sub(2, 1) print(b)