XDRush

ubuntu下Boost.Python环境配置

1 说明

Python很强大,但已有的模块可能满足不了所有的场景需求,于是有时需要编写扩展模块进行完善。Boost无疑是开发最快的一种方案。

2 Boost.Python环境配置

2.1 安装Python、Boost

Python安装不再细述,ubuntu下安装boost只需一行命令即可。

1
sudo apt-get install libboost-dev

安装完成之后,用下面这段代码测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace std;
int main()
{
string s = "100";
int a = boost::lexical_cast<int>(s);
int b = 1;
cout << (a + b) << endl;
return 0;
}

运行成功则说明Boost环境已经搭建好啦。

3利用C++ Boost编写Python模块

3.1 源文件编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#define BOOST_PYTHON_SOURCE
#include <boost/python.hpp>
#include <iostream>
using namespace std;
using namespace boost::python;
void hello_func()
{
cout<<"hello boost"<<endl;
}
BOOST_PYTHON_MODULE(boostpy)
{
def("Hello", hello_func, "function targets...");
}

3.2 编译为动态库

在命令行中执行:

1
2
3
4
g++ -shared -o boostpy.so -fPIC -I /YourPythonIncludePath/ helloworld.cpp -lpython2.6 -lboost_python
// 以本人电脑为例,进入到helloworld.cpp文件所在目录,执行:
g++ -shared -o boostpy.so -fPIC -I /usr/include/python2.7/ helloworld.cpp -lpython2.7 -lboost_python

其中,YourPythonIncludePath为本地python库的路径。
执行这一步过程中,可能报这个错误:

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

这个错误一般就是由于上面YourPythonIncludePath配置不对导致的。当然,不过不想每次都加上这个路径,可以将其配置到环境变量中:

1
export CPLUS_INCLUDE_PATH="$CPLUS_INCLUDE_PATH:/usr/include/python2.7/"

这一步配置正确了,可能还会遇到以下这个问题:

1
library not found for lboost_python

用locate命令查找下boost_python.so,确实没有这个文件,

1
sudo apt-get install libboost-python-dev

执行上述命令安装这个库即可。

以上所有步骤都正确则会在当前目录中生成一个boostpy.so文件,这个文件即是python中的模块。

3.3 python加载模块

在python中直接import这个module即可使用:

1
2
3
>>> import boostpy
>>> boostpy.Hello()
hello boost python

4 References

[1] http://stackoverflow.com/questions/33471055/library-not-found-for-lboost-python
[2] http://stackoverflow.com/questions/19810940/ubuntu-linking-boost-python-fatal-error-pyconfig-cannot-be-found