从Matplotlibcpp调用Show()或Save()函数时,PyObject_CallObject返回NULL



我已经在我的C++项目中集成了Matplotlibcpp,来自:

https://github.com/lava/matplotlib-cpp

我使用Clion按项目构建,以下是我如何进行链接的:

cmake_minimum_required(VERSION 3.13)
project(beep)    
set(CMAKE_CXX_STANDARD 14)
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -ftest-coverage -fprofile-arcs" )
link_directories(C:/MinGW/lib)
find_package (Python3 COMPONENTS Interpreter NumPy)
include_directories(C:/Python37/include/)
link_libraries(C:/Python37/libs/libpython37.a Python3::NumPy)
include_directories( kissfft kissfft/tools matplotlib-cpp )
add_executable(beep kissfft matplotlib-cpp  kissfft/tools/kiss_fftr.c  kissfft/_kiss_fft_guts.h Beep_Generator.cpp plottingVector.h)

这是我的代码:

#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;
void plotting() {
try {
plt::plot( {1, 2, 3, 4, 5, 6},{0,1,2,3,4,5},"test");
plt::show();
}
catch (std::exception &e) {
cout << e.what() << endl;
}

当我运行此代码时,我得到以下错误:

Call to show() failed.

当我调试代码时,我看到了这里的问题:

matplotlibcpp.h(Line # 1835):  res = PyObject_CallObject(detail::_interpreter::get().s_python_function_show,detail::_interpreter::get().s_python_empty_tuple);

res变为NULL。

这里有什么问题?我该如何解决?

谨致问候,Khubeib

res返回NULL表示发生了Python异常。不幸的是,包装器似乎没有对此进行探测,只是引发了一个任意的C异常。

为了进一步研究,您需要直接使用Python C API。仔细检查是否设置了异常,然后打印。

if (PyErr_Occurred()) {
PyErr_PrintEx(0);
PyErr_Clear(); // this will reset the error indicator so you can run Python code again
}

最新更新