前言:
现时朋友们对“boostpython编译”大约比较关心,看官们都想要分析一些“boostpython编译”的相关文章。那么小编在网摘上汇集了一些对于“boostpython编译””的相关资讯,希望看官们能喜欢,小伙伴们快快来学习一下吧!问题
我们很喜欢Python的简单易用,也喜欢性能强劲的C++。在这种情况下,就有了混合编程的需求。对性能敏感的地方,我们可以采用C++来编写,其他的地方,比如业务逻辑,用户界面这些,Python就可能更合适。今天我们就来讲讲如何在Python中调用C++代码。本方法主要使用boost库中的Python组件来对C++库代码进行封装,从而实现在Python环境下调用C++的功能。
安装boost库
# yum install boost
安装Python开发库
# yum install python-devel
创建C++库
编制一个简单的C++库,文件名为helloworld.cpp,文件内容如下:
创建Python封装库
再编制一个用于Python调用的封装库,文件名为helloworldpy.cpp,文件内容如下:
注意,这里的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++代码了。如下图所示:
碰到的问题
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
标签: #boostpython编译