深入学习python (七) 如何用python调用C/C++接口

python这门优美而以人为本的语言的人性化导致其开发效率的高,高的同时他牺牲了的程序运行效率,在项目开发的后期,可以通过对某些耗时的松耦合的单独的瓶颈模块进行C++重构,然后直接用python改调用C++写的模块即可。

看过了网上的一些例子,自己也来试一试:

首先是一个C++程序的代码,test.cpp如下:

#include <iostream>
char const* hello()
{
    return "hello, world";
}
void bye()
{
    using namespace std;
    cout << "bye" <<endl;
}

接着,编写接口文件,在接口文件中引入之前编写的test.cpp程序,接口文件为b.cpp,代码如下:

#include <boost/python.hpp>
#include "test.cpp"
BOOST_PYTHON_MODULE(hello_bye)
{
    using namespace boost::python;
    def("hello", hello);
    def("bye",bye);
}

这时候,在终端输入:

g++ b.cpp -o hello_bye.so -shared -I/usr/include/python2.7 -lboost_python-gcc43-mt

搞定了。。。

没有那么简单,至少我在mac OS X系统下没成功,捯饬了半天都没成功,首先要安装boost库,brew install boost即可,很重的一个库,编译的时候,cpu满负荷运转,很吓人。

然后,还是不成功,出错,debug了半天,暂时放在这,改天更新此处,欢迎指教我该如何继续,老是出错啊,google与stackoverflow也不行。

改天吧。。。

参考其他的网络教程,

结果测试如下:

>>> import hello_bye
>>> hello_bye.hello()
'hello, world'
>>> print hello_bye.hello()
hello, world
>>> hello_bye.bye()
bye
>>>

其实python调用C/C++的方法还有其他的,以后再解决这根小骨头吧。。。

深入学习python (七) 如何用python调用C/C++接口

时间: 2024-08-14 10:29:43

深入学习python (七) 如何用python调用C/C++接口的相关文章

Python学习教程:如何用python统计代码行数

Python学习教程:如何用python统计代码行数 改良后的代码可以对python和C系列的代码实行行数计算,包括代码.空行和注释行,用re抓取注释,传入一个目录自动对其下的文件进行读取计算 流程 首先判断传入参数是否为文件夹,不是则打印出提示,否则继续(无返回),获得目录后,yongos.listdir对路径下文件进行遍历,其中也包含文件夹,再次判断是否为文件夹,是的话则递归调用此函数,否则开始执行行数统计,这里用os.path.join将路径与文件名进行拼接,方便之后直接传给函数,逻辑很简

Struts2学习第七课 动态方法调用

动态方法调用:通过url动态调用Action中的方法. action声明: <package name="struts-app2" namespace="/" extends="struts-default"> <action name="Product" class="org.simpleit.app.Product"> </package> URI: --/strut

rabbitMQ学习笔记(七) RPC 远程过程调用

当客户端想要调用服务器的某个方法来完成某项功能时,就可以使用rabbitMQ支持的PRC服务. 其实RPC服务与普通的收发消息的区别不大, RPC的过程其实就是 客户端向服务端定义好的Queue发送消息,其中携带的消息就应该是服务端将要调用的方法的参数 ,并使用Propertis告诉服务端将结果返回到指定的Queue. 示例: 1 package com.zf.rabbitmq07; 2 3 import java.io.IOException; 4 5 import com.rabbitmq.

Python快速学习第七天

魔法方法.属性和迭代器 本文内容全部出自<Python基础教程>第二版 在Python中,有的名称会在前面和后面都加上两个下划线,这种写法很特别.前面几章中已经出现过一些这样的名称(如__future__),这种拼写表示名字有特殊含义,所以绝不要在自己的程序中使用这样的名字.在Python中,由这些名字组成的集合所包含的方法称为魔法(或特殊)方法.如果对象实现了这些方法中的某一个,那么这个方法会在特殊的情况下(确切地说是根据名字)被Python调用.而几乎没有直接调用它们的必要. 本章会详细讨

python学习笔记七:条件&循环语句

1.print/import更多信息 print打印多个表达式,使用逗号隔开 >>> print 'Age:',42 Age: 42   #注意个结果之间有一个空格符 import:从模块导入函数 import 模块 from 模块 import 函数 from 模块 import * 如果两个模块都有open函数的时候, 1)使用下面方法使用: module1.open()... module2.open()... 2)语句末尾增加as子句 >>> import ma

Python学习第七天课后总结

<html> ? python学习第七天课后总结: 今日内容: 一,,字符编码:其实就是人类的语言与机器的语言进行转化的一种媒介. ? 1,人类语言与机器语言对照关系的结构被称为:编码表 ? 常用编码表大致有以下几个: ? 1> ascii (ASCII) 现为今出现最早的编码表,采用一个字节来存储字母却无法编码汉字 ? 2> GBK 这个是专门为中文来制作的编码,国人专用 ? 3> Shift_JIS 日文使用的文件编码方式 ? 4> Euc-kr 韩文使用的编码方式

Python学习----第七模块笔记(Web开发进阶之Django数据库操作)

4.Django ORM 4.1.连接数据库 创建Django工程后运行该工程,会在工程根目录下创建db.sqlite3文件,为Django自带的sqlite3数据库(Django自带的功能也需要数据库支持),如果没有在settings.py文件中进行配置的话,数据将会保存在该数据库中. Django使用MySQL: # 修改settings.py中DATABASES = {}的内容为 DATABASES = { 'default': { 'ENGINE': 'django.db.backend

python学习【第一篇】python介绍

python发展历史 起源 Python的作者,Guido von Rossum,荷兰人.1982年,Guido从阿姆斯特丹大学获得了数学和计算机硕士学位.然而,尽管他算得上是一位数学家,但他更加享受计算机带来的乐趣.用他的话说,尽管拥有数学和计算机双料资质,他总趋向于做计算机相关的工作,并热衷于做任何和编程相关的活儿. 在那个时候,Guido接触并使用过诸如Pascal.C.Fortran等语言.这些语言的基本设计原则是让机器能更快运行.在80年代,虽然IBM和苹果已经掀起了个人电脑浪潮,但这

学习 Machine Learning Mastery With Python (1)

1 介绍 1.1 机器学习的错误的想法 一定要对python 编程和python语法非常了解 深入学习scikit learn使用的机器学习算法的理论和参数 避免或者不能接触实际项目中的其他部分. 对某些人可能是适用的, 但是对于很多人, 这样会让人觉得望而生畏,经过很长的准备过程学习理论和算法 , 才能开始实际的项目. 很遗憾的是, 这是市面上大部分书籍所采取的办法. 1.2 python 机器学习 这本书主要介绍机器学习的一个子领域叫做预测模型.这个是机器学习在工业界最有用的应用. 本书的组