linux中使用boost.python调用c++动态库的方法

2019-01-16 20:48:47于丽

Makefile 使用的命令是:

%.o : %.cpp g++ -g -lssl -fPIC -levent -lcrypto -luuid -lpthread -lrt -lboost_filesystem -lboost_system -lboost_python -lpython -I/usr/include/python2.7 -o $@ -c $<

生成B.so的命令是:

g++ -shared -Wl,-soname,libB.so -o libB.so *.o -lpython -lboost_python

python脚本中则需要引入该动态库

import libB print libB.add(10,20)

按照上面的命令进行编写、编译,就能规避我踩过的坑。注意 -lpython 的位置,不要放在前面。 如果没有实现重载的定义,而是直接使用 def("LOGIN",LOGIN); 则会报如下的错误 error: no matching function for call to ‘def(const char [15], <unresolved overloaded function type>)' def("LOGIN",LOGIN); 综上是我花了一整天时间研究的成果,如有错漏,还请读者指出,谢谢。

补充:当采用boost.python的方式调用c++动态库的时候,我无法处理引用类型,比如 string& recv_answer 用来接收返回结果,被识别为 string{lvalue},而我的python传入的是 string 类型,无法匹配。所以我就手动将 string& recv_answer的string类型的引用,改写成 char * recv_answer_c 格式,就是改成 C 语言的风格,然后用下面的方式传入 recv_answer_c 这个参数用来接收结果。

#采用 bytes 的方式,为变量预先分配空间,保证不会段错误 temp = bytearray(1000) recv_answer_c= bytes(temp)

总结:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对易采站长站的支持。

您可能感兴趣的文章:

linux下编译boost.python简单方法python和C语言混合编程实例批处理与python代码混合编程的方法深入理解C/C++混合编程C/C++在Java、Android和Objective-C三大平台下实现混合编程C和C++混合编程问题C/C++混合编程之extern “C”的使用示例如何利用Boost.Python实现Python C/C++混合编程详解