1,安装boost
sudo apt-get install python-dev libxml2-dev libxslt-dev
下载boost源代码https://www.boost.org/users/download/解压开。
2,
./bootstrap.sh --with-python=/home/jt/tfenv3/bin/python3
sudo ./b2 cxxflags=-fPIC cflags=-fPIC --c++11
sudo ./b2 install
3,建立一个 test.cpp文件测试
gedit test.cpp
#include<iostream>
#include<boost/bind.hpp>
using namespace std;
using namespace boost;
int fun(int x, int y){return x+y;}
int main(){
int m=1; int n=2;
cout<<boost::bind(fun,_1,_2)(m,n)<<endl;
return 0;
}
g++ test.cpp -o test
./test
输出3,boost安装完成
4,用boost.python库导出C++函数
新建测试文件hello.cpp:
#include <iostream>
#include <boost/python.hpp>
using namespace boost::python;
void SayHello()
{
std::cout<<"hello, world!"<<std::endl;
}
void SayBye()
{
std::cout<<"good bye!"<<std::endl;
}
BOOST_PYTHON_MODULE(hello) // generate python module hello
{
def("SayHello", SayHello);
def("SayBye", SayBye);
}
编译:
g++ hello.cpp -shared -fPIC -o hello.so -I ~/Downloads/boost_1_67_0 -L ~/Downloads/boost_1_67_0/stage/lib -lboost_python -I /home/jt/tfenv3/bin/python3
生成hello.so
进入python:
import hello
hello.SayHello()
输出:hello, world!
5,用boost.python库导出C++类:
新建helloclass.cpp:
#include <string>
#include <boost/python.hpp>
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace std;
class CHello{
public:
string GetString()
{
return "CHello::GetString()";
}
int GetInt()
{
return 100;
}
};
BOOST_PYTHON_MODULE(hello_class)
{
using namespace boost::python;
class_<CHello>("CHello")
.def("GetString",&CHello::GetString)
.def("GetInt",&CHello::GetInt)
;
}
编译:
g++ helloclass.cpp -shared -fPIC -o hello_class.so -I ~/Downloads/boost_1_67_0 -L ~/Downloads/boost_1_67_0/stage/lib -lboost_python -I /home/jt/tfenv3/bin/python3
进入python:
import hello_class
a = hello_class.CHello()
a.GetInt()
输出:100
6:,用boost.python库导出构造函数
新建class.cpp:
#include <string>
#include <boost/python.hpp>
using namespace std;
class CHello{
public:
CHello(string msg)
: m_msg(msg)
{
m_id = 0;
}
CHello(int id)
{
m_id = id;
}
string GetString() const
{
return m_msg;
}
string SetString(string msg)
{
m_msg = msg;
}
int GetInt()
{
return m_id;
}
int SetInt(int id)
{
m_id = id;
}
string m_msg;
int m_id;
};
BOOST_PYTHON_MODULE(hello_class)
{
using namespace boost::python;
class_<CHello>("CHello", init<string>())
.def(init<int>())
.def("SetString", &CHello::SetString)
.def("GetString", &CHello::GetString)
.def("GetInt", &CHello::GetInt)
;
}
编译:
g++ class.cpp -shared -fPIC -o hello_class.so -I ~/Downloads/boost_1_67_0 -L ~/Downloads/boost_1_67_0/stage/lib -lboost_python -I /home/jt/tfenv3/bin/python3
进入python:
import hello_class
b = hello_class.CHello("hello world!")
b.GetString()
‘hello world!’
7,生成自己相机驱动程序的python库!
g++ main.cpp -shared -fPIC -o mv.so -I ~/Downloads/boost_1_67_0 -L ~/Downloads/boost_1_67_0/stage/lib -lMVSDK -lboost_python-py35 -I /home/jt/tfenv3/include/python3.5m -I ./
其中:
boost_python-py35对应/usr/lib/x86_64-linux-gnu目录下的libboost_python-py35.so
-I:编译程序按照-I指定的路进去搜索头文件
-L:编译程序按照-L指定的路进去寻找库文件,一般的在-L的后面可以一次用-l指定多个库文件(例如上面的-lboostpython)
-o:指定生成可执行文件的名称。