使用swig在python中調用C++


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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM