當前位置:
首頁 >
在Python中调用C++,使用SWIG
發布時間:2025/5/22
34
豆豆
生活随笔
收集整理的這篇文章主要介紹了
在Python中调用C++,使用SWIG
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www.coder4.com/archives/2141
SWIG:Simplified Wrapper and Interface Generator,顧名思義,就是將C/C++包裝為其他高級語言的Wrapper工具,非常好用。
該項目歷史悠久(創始于1995年!),且一直非常活躍,目前最新版本為2011年5月發布的2.0.4。
1、安裝SWIG
| 1 2 3 4 5 6 7 | wget http://prdownloads.sourceforge.net/swig/swig-2.0.4.tar.gz tar -xzvf swig-2.0.4.tar.gz cd swig-2.0.4/ #我們這里只編譯Python的語言支持,可以根據你得需要加別的! ./configure --without-alllang --with-python|grep python make sudo make install |
2、C++代碼
我們以包裝一個簡單的類為例子:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include <string> using std::string; class MyObj { public: ????string SayHello(string name) ????{ ????????string ret("Hello, "); ????????return ret + name; ????} private: ????string id; }; |
3、編寫Interface文件
SWIG需要一個intf文件,可以寫的很復雜,也可以偷懶:只引用你要Wrap的.h頭問件就可以啦!
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | /* myobj.i */ %module myobj %{ /* 相關引用 */ #include "MyObj.h" #include <string> %} /* 對STL的支持 */ %include stl.i /* Wrapper并生成代碼 */ %include "MyObj.h" |
4、生成Wrapper代碼
| 1 2 3 4 5 6 7 8 | #生成,第一個python是目標語言,跌入個-c++是啟用c++模式 swig -python -c++ ./myobj.i #成功的話,會生成如下文件 myobj.i??myobj_wrap.c??myobj_wrap.cxx #編譯,生成so文件,注意一定要用g++而不是ld做Link!! g++ -c myobj_wrap.c myobj_wrap.cxx -I /usr/include/python2.6/ -fPIC g++ -shared myobj_wrap.o -o?_myobj.so |
5、測試
| 1 2 3 4 5 | >>> import myobj >>> o = myobj.MyObj() >>> o.SayHello("ICT") 'Hello, ICT' >>> |
6、補充
如果你想使用復合類型,例如vector<string>,請務必在.i文件中聲明!
| 1 2 3 4 | namespace std{ %template(VectorOfString) vector<string>; } |
轉載于:https://www.cnblogs.com/DjangoBlog/p/4105530.html
總結
以上是生活随笔為你收集整理的在Python中调用C++,使用SWIG的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 农业局管理药材统计是哪个部位
- 下一篇: c++ 宽搜(倒水)