使用boost python编译在python代码内部调用的c ++代码时出错
Posted
技术标签:
【中文标题】使用boost python编译在python代码内部调用的c ++代码时出错【英文标题】:error while compiling a c++ code which is called inside of a python code, with boost python 【发布时间】:2019-09-14 11:15:59 【问题描述】:我在 Python 中开始了一个项目,我想使用一些图像对象。我想在我的 Python 代码中调用一些 C++ 函数。经过一番研究,我决定使用 Python Boost 库在我的 Python 代码中调用 C++ 函数。
我的 Boost 版本是:libboost_python3-py36.so.1.65.1。 我正在使用 Python v3.6。
我在 CppProject.cpp 中编写了这样的 C++ 代码:
char const* myMethod()
// do some operations ...
return "It is Done";
#include <boost/python.hpp>
BOOST_PYTHON_MODULE(CppProject)
boost::python::def("getTryString", myMethod); // boost::python is the namespace
另外,我像这样创建了我的 CMakeLists.txt:
cmake_minimum_required(VERSION 2.8.3)
FIND_PACKAGE(PythonInterp)
FIND_PACKAGE(PythonLibs)
FIND_PACKAGE(Boost COMPONENTS python)
INCLUDE_DIRECTORIES($Boost_INCLUDE_DIRS $PYTHON_INCLUDE_DIRS)
PYTHON_ADD_MODULE(NativeLib CppProject)
FILE(COPY MyProject.py DESTINATION .) # See the whole tutorial to understand this line
最后,这是我在 MyProject.py 中的 Python 代码:
import NativeLib
# some preprocess
print (NativeLib.getTryString)
编写代码后,我创建了一个名为 build 的目录。 在那个目录中,我运行了这个命令:
cmake -DCMAKE_BUILD_TYPE=Release ..
在那之后,在我运行我的 Python 代码之前,我确实做到了,最后,我运行了我的 python 代码,但是发生了分段错误!
有人可以帮我解决这个错误吗?
【问题讨论】:
你能提取一个minimal reproducible example吗?此外,您使用的 Python 和 Boost 版本可能很重要。 与您的当前问题无关,但 Python 脚本并没有真正调用该函数。 当您创建 minimal reproducible example 向我们展示时,还包括构建该示例的 full 和 complete 错误输出,包括任何可能的信息笔记。并且不要忘记该示例需要向我们展示您拥有的所有#include
指令(简而言之,我们应该可以复制粘贴它并尝试复制错误)。
你没有包含boost头文件
你说你“写了我的 c++ 代码 like 这个”(强调我的)...这真的是你使用的 exact 代码吗?不包括任何头文件?
【参考方案1】:
编译器需要在您使用它们之前声明您在程序中使用的所有符号。如果您使用尚未声明的符号,它将给您一个错误,因为它不知道。
现在当您使用BOOST_PYTHON_MODULE
时,编译器不知道该符号,因此整个语句在语法上是错误的。
您必须包含定义 BOOST_PYTHON_MODULE
宏以及 boost::python::def
的 Boost 头文件。
【讨论】:
你是对的。我将 #include以上是关于使用boost python编译在python代码内部调用的c ++代码时出错的主要内容,如果未能解决你的问题,请参考以下文章
无法在 Boost.Python 中使用 __stdcall 编译示例