Gnuradio中使用到了swig來讓python可以調用c++代碼。
轉自:https://blog.csdn.net/qq_26105397/article/details/83153606
1.安裝swig
方法步驟:
a,下載swig源碼包
http://www.swig.org/survey.html
b,解壓swig安裝包,解壓並進行安裝。
tar -xvf swig-3.0.12.tar.gz
./configure --prefix=/usr/localswig(此處指定安裝目錄,不指定默認直接默認系統路徑)
(如果執行這不成功,缺少prce錯誤,說明缺少對應的文件,需要安裝對應庫,個人使用的是烏班圖,安裝法:apt-get install pcre-dev,或者下載源碼包進行安裝即可 )
make && make install
至此,swig安裝完成。
注:或者直接使用apt-get命令安裝swig也可以。
2.使用
1)編寫C++代碼
test.h
#ifndef __TEST_H #define __TEST_H int add(int a,int b); int sub(int a,int b); #endif
test.cpp
#include "test.h" int add(int a, int b){ return a+ b;} int sub(int a,int b){ return a - b;}
2)編寫test.i文件
- %module 后面的名字是被封裝的模塊名稱。封裝口,python通過這個名稱加載程序
- %{ %}之間所添加的內容,一般包含此文件需要的一些函數聲明和頭文件。
- %最后一部分,聲明了要封裝的函數和變量,直接使用%include 文件模塊頭文件直接包含即可
test.i
// file test.i %module test %{ #define SWIG_WITH_INIT #include "test.h" %} %include "test.h"
3)執行swig命令
swig -python -c++ test.i
此時會生成對應的文件: test_wrap.cxx (即模塊名_wrap.cxx)
4)調用python自動化編譯工具
利用python提供的自動化編譯模塊進行編譯。編寫一個編譯文件setup.py。需要的模塊是setuptools,沒有的話使用pip自行安裝。
setup.py
#!/usr/bin/python #-- coding:utf8 -- from setuptools import setup, Extension test_module = Extension("_test", sources = ['test_wrap.cxx', 'test.cpp'],) #其中的名字,與自己編寫的文件對應就好,“_test”即模塊名稱,必須要有下划線 setup(name = 'test',version = '0.1',author = 'SWIG Docs',description = 'Simple swig pht from docs',ext_modules = [test_module],py_modules = ['test'],) #除了與模塊名有關的內容,其他的信息可以自己修改
然后執行setup.py:python setup.py build test
5)在python中使用test模塊
可在python解釋器中或者.py 使用import test,即可使用。