python cpp_实战经验:借助boost实现Python调用C++代码

原标题:实战经验:借助boost实现Python调用C++代码

问题

我们很喜欢Python的简单易用,也喜欢性能强劲的C++。在这种情况下,就有了混合编程的需求。对性能敏感的地方,我们可以采用C++来编写,其他的地方,比如业务逻辑,用户界面这些,Python就可能更合适。今天我们就来讲讲如何在Python中调用C++代码。本方法主要使用boost库中的Python组件来对C++库代码进行封装,从而实现在Python环境下调用C++的功能。

安装boost库

# yum install boost

安装Python开发库

# yum install python-devel

创建C++库

编制一个简单的C++库,文件名为helloworld.cpp,文件内容如下:

472d0cb98c5a40d6af19e978fa04bc7b.jpeg

创建Python封装库

再编制一个用于Python调用的封装库,文件名为helloworldpy.cpp,文件内容如下:

421daa664ba14d2fa46bb3e63b09a886.jpeg

注意,这里的helloworld为封装库的名字,def中第一个参数为Python面对的外部接口函数名字,后面第二个参数为实际调用的C++函数名字。

另外,文件开头包含的是C++库的实现代码,即上面的helloworld.cpp。

编译生成封装库

g++ helloworldpy.cpp -fPIC -shared -I/usr/include/python2.7 -lboost_python -o helloworld.so

注意,这里仅编译helloworldpy.cpp,不需要在编译helloworld.cpp文件了,否则会出现test函数重复定义的问题。

另外-fPIC和-shard一起使用,可以生成一个Linux共享库,而不是静态库。

这里的-I/usr/include/python2.7表示Python的头文件路径,需要安装Python的实际安装位置修改。

-lboost_python表示需要链接到boost_python库。

最后,-o helloworld.so指定最终生成的封装库的名字为helloworld.so。

执行效果

在生成的so文件同一目录下,我们在Shell中打开Python,首先import我们的封装库,然后调用外部接口函数,即可完成Python环境下调用我们编写的C++代码了。如下图所示:

9633d87536ed4447bca82621e0be588c.jpeg

碰到的问题

1)如果编译封装库的时候,出现了如下的问题:

In file included from /usr/include/boost/python/detail/prefix.hpp:13:0,

from /usr/include/boost/python/args.hpp:8,

from /usr/include/boost/python.hpp:11,

from helloworld.cpp:2:

/usr/include/boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory

# include ^

compilation terminated.

这是因为当前环境下没有安装的Python的开发库,使用yum安装一下即可。

# yum install python-devel

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值