python 调用c++

找了一些python调用c++的方法,发现Python提供了ctypes这个包,可以很容易的使用Python直接调用C语言实现的接口,这使得开发的工作量大大降低,只是ctypes是基于libffi实现的跨语言封装,性能上可能会比使用C Extending来得慢一些。转载下,原文链接:http://blog.csdn.net/kuaile123/article/details/11024873


由于Python的ctypes可以使python轻松调用动态链接库,从而调用c/c++程序。利用gcc编译c++文件为动态链接库dll或者so文件,再利用python来调用。

1、下载gcc

系统为win7 X32,下载windows版本 MinGW,下载地址:http://sourceforge.net/projects/mingw/files/Installer/mingw-get-inst/

下载Download mingw-get-setup.exe (86.5 kB) (注意这是win32 的版本)

进行安装:

选择默认安装目录 C:\MinGW;

选择安装组件,如果没有出现这个窗口,点击快速启动栏,点击MinGW Installation Manager,一定选上安装The GUN C++ Compiler和The GUN Objectiv-C Compiler。

完成之后退出,将C:\MinGW\bin 添加到环境变量。设置完成后,Windows似乎不会自动更新环境变量,除非重启机子,那么我们可以通过在下面的命令行中,胡乱设置一下PATH(比如SET PATH=C:\),然后退出命令行,那么系统环境变量就会被强制刷新。

点击cmd,输入 g++ v 可以查看编译器版本。

 

2、编译c++

新建一c++文件:如test1.cpp

[html] view plain copy
  1. #include<iostream>    
  2. using namespace std;    
  3. void foo2(int a,int b)    
  4. {    
  5.     cout<<a<<" "<<b<<endl;    
  6. }   
  7. //编译C++,一定要加extern "C",注意C为大写,小写会无法识别  
  8. extern "C"  
  9. {    
  10.    void cfoo2(int a,int b)    
  11.  {    
  12.         foo2(a,b);    
  13.  }    
  14. }    

在cmd窗口中cd到该文件所在目录,输入:g++ -o test1.so -shared -fPIC test1.cpp

-shared 该选项指定生成动态连接库(让连接器生成T类型的导出符号表,有时候也生成弱连接W类型的导出符号),不用该标志外部程序无法连接。相当于一个可执行文件;
-fPIC:表示编译为位置独立的代码,不用此选项的话编译后的代码是位置相关的所以动态载入时是通过代码拷贝的方式来满足不同进程的需要,而不能达到真正代码段共享的目的。

会生产一个test1.so 动态链接库文件。

3、python调用

写python文件,如test1.py

[html] view plain copy
  1. import ctypes    
  2. ll = ctypes.cdll.LoadLibrary   
  3. lib = ll("./test1.so")    
  4. lib.cfoo2(3, 4)  

运行python文件 python test1.py

运行成功显示:1 3

发布了22 篇原创文章 · 获赞 19 · 访问量 11万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览