"Segmentation fault"使用 Cmake 在C++代码中运行 python 函数时
"Segmentation fault" when run python function in C++ code using Cmake
我正在学习将python代码嵌入到c ++代码中。按照C&Python混合编程时如何解决"分段错误"中的简单示例?并使用g++ main.cpp -I/usr/include/python2.7 -L/usr/lib/python2.7 -lpython2.7
编译代码并运行程序,我可以得到正确的结果。
但是,如果我创建一个"构建"文件夹并使用CMake运行该程序,它仍然存在分段错误。
我的CMakeList.txt如下所示:
cmake_minimum_required(VERSION 2.8)
project ( pyTest )
if(NOT CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE "RELEASE")
endif()
string(ASCII 27 Esc)
set(Red "${Esc}[1;31m")
set(ColourReset "${Esc}[m")
if(CMAKE_BUILD_TYPE MATCHES "DEBUG")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -O0 -g")
MESSAGE(STATUS "${Red}BUILD TYPE: DEBUG${ColourReset}")
else()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x -O3")
MESSAGE(STATUS "${Red}BUILD TYPE: RELEASE${ColourReset}")
endif()
include_directories( include )
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
set(SRC_LIST2 main.cpp)
add_executable( pytest ${SRC_LIST2})
target_link_libraries(pytest ${PYTHON_LIBRARIES})
为了方便起见,我在下面发布了我的代码:
pytest.py
def Hello():
print "Hello, world!"
主.cpp
#include <Python.h>
int main()
{
Py_Initialize();
PyRun_SimpleString ("import sys; sys.path.insert(0, 'DIRECTORY_PATH'");
PyObject * pModule = NULL;
PyObject * pFunc = NULL;
pModule = PyImport_ImportModule("pytest");
pFunc = PyObject_GetAttrString(pModule, "Hello");
if(pFunc != NULL) {
PyEval_CallObject(pFunc, NULL);
Py_Finalize();
}
else {
printf("pFunc returned NULLn");
}
return 0;
}
其中"DIRECTORY_PATH"是我的主文件和 pytest.py 的文件夹路径.cpp而不是"构建"文件夹的路径
当我打印出PyImport_ImportModule的结果时,它返回 0。我认为这意味着它没有得到python模型。但是我的主.cpp和python文件在同一个目录下,我不知道为什么它无法获取模型...
我可以修复它吗?谢谢!
由我自己解决。我应该将 main.cpp 和 pytest.py 放在同一个目录下,并使用 PyRun_SimpleString ("import sys; sys.path.insert(0, 'DIRECTORY_PATH'");
将"DIRCTORY_PATH"更改为保存 main 和 pytest.py 的当前目录.cpp。(在我使用错误的目录之前,所以我得到了分段错误)
相关文章:
- IPC使用多个管道和分支进程来运行Python程序
- 是否有可能让 c++ dll 在后台运行 python 程序并让它填充向量图?如果是这样,如何?
- 在C++中运行 python 对象
- 从 c++ 运行 python 脚本时出现问题
- 在 boost::p ython 中的 python 对象中运行 python 代码
- 从 c++ 中运行 python 脚本,找不到模块
- 使用C++,如何在Qt Designer中运行python文件
- 如何从Qt C++项目运行Python函数
- 如何从 c++ 运行 python 程序
- 在构建之前,如何使Cmake在构建之前运行Python脚本,以生成用于构建中的项目的文件
- 使用一个 C 程序运行 python 脚本(不同的 python 版本)
- "Segmentation fault"使用 Cmake 在C++代码中运行 python 函数时
- 运行Python脚本同时嵌入C
- 如何从C++程序运行 python 脚本
- c++运行python代码导入自定义模块
- 使用Python.h在C++中运行Python脚本
- 从C++运行Python(VS2010,编译器v100)
- 如何在c++中运行Python文件
- 在gdb中运行python/c++混合代码
- Eclipse 找不到 libnppc.so.7.0 库来运行 python 代码,其中包含使用 CUDA 库的 Opencv 命令