C++ 编译c+时出错+;在python代码内部调用的代码,使用boost python

C++ 编译c+时出错+;在python代码内部调用的代码,使用boost python,c++,makefile,boost-python,C++,Makefile,Boost Python,我用Python启动了一个项目,我想处理一些图像对象。我想在我的Python代码中调用一些C++函数。经过一些研究,我决定使用Python Boost库调用我的Python代码中的C++函数。 我的Boost版本是:libboost_python3-py36.so.1.65.1。 我正在使用Python v3.6 我在CppStask.Cp:中编写了这样的C++代码。 char const* myMethod() { // do some operations ... re

我用Python启动了一个项目,我想处理一些图像对象。我想在我的Python代码中调用一些C++函数。经过一些研究,我决定使用Python Boost库调用我的Python代码中的C++函数。 我的Boost版本是:libboost_python3-py36.so.1.65.1。 我正在使用Python v3.6

我在CppStask.Cp:

中编写了这样的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
}

最后,这是我在MyProject.py中的Python代码:

import NativeLib
# some preprocess
print (NativeLib.getTryString)
在编写代码之后,我创建了一个名为build的目录。 在该目录中,我运行了以下命令:

cmake -DCMAKE_BUILD_TYPE=Release ..
在那之后,在我运行Python代码之前,我做到了,最后,我运行了Python代码,但出现了分段错误


有人能帮我解决这个错误吗?

编译器需要声明程序中使用的所有符号,然后才能使用它们。如果您使用一个尚未声明的符号,它将给您一个错误,因为它不知道它

现在,当您使用
BOOST\u PYTHON\u MODULE
时,编译器不知道该符号,因此整个语句在语法上是错误的


您必须包含定义
Boost\u PYTHON\u模块
宏的Boost头文件,以及
Boost::PYTHON::def

您能提取一个吗?此外,使用哪种版本的Python和Boost可能也很重要。与您当前的问题无关,但Python脚本并没有真正调用函数。当您创建一个示例来向我们展示时,还包括构建该示例的完整错误输出,包括任何可能的信息注释。别忘了这个例子需要告诉我们所有的<代码>包含了< /Cord>指令(简而言之,我们应该复制粘贴它并尝试复制错误)。你不包括Boost报头文件,你说你“写了我的C++代码,像这样”(强调我的)…这真的是你使用的代码吗?不包括任何头文件?你是对的。我把C++包含在我的C++代码中,然后它就正确了。但当我运行python代码时,出现了分段错误。
cmake -DCMAKE_BUILD_TYPE=Release ..