Ich lerne Python-Code in C++ - Code einzubetten. Folgen Sie dem einfachen Beispiel in How to solve the 'Segmentation fault' when hybrid programming of C & Python? und verwenden Sie g++ main.cpp -I/usr/include/python2.7 -L/usr/lib/python2.7 -lpython2.7
, um den Code zu kompilieren und das Programm auszuführen, kann ich das richtige Ergebnis erhalten."Segmentierungsfehler" beim Ausführen von Python-Funktion in C++ - Code mit Cmake
Aber wenn ich einen "Build" -Ordner erstellen und CMake verwenden, um das Programm auszuführen, hat es immer noch Segmentierungsfehler.
Mein CMakeList.txt ist wie unten:
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})
Der Einfachheit halber ich meinen Code schreiben unter:
pytest.py
def Hello():
print "Hello, world!"
main.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 NULL\n");
}
return 0;
}
wo "DIRECTORY_ PATH“ist der Ordner Pfad meiner main.cpp-Datei und pytest.py, nicht der Weg der‚build‘-Ordner
Wenn ich das Ergebnis von PyImport_ImportModule auszudrucken, gibt es 0. Ich denke, das bedeutet, dass es nicht Holen Sie sich das Python-Modell. Aber meine main.cpp und Python-Datei sind unter demselben Verzeichnis, ich weiß nicht, warum es das Modell nicht bekommen kann ...
Kann ich es beheben? Danke!
Kannst du den Fehler posten, den du bekommst? – 1N5818
@Displayname Der Fehler ist nur "Segmentierungsfehler". Keine anderen Nachrichten ... Aber wenn ich das Ergebnis von PyImport_ImportModule ausdrucke, gibt es 0 zurück. Ich denke, das bedeutet, dass es das Python-Modell nicht bekommt. Aber meine main.cpp und python Datei ist unter demselben Verzeichnis, ich weiß nicht, warum es das Modell nicht bekommen kann ... –
Der Name Ihres Moduls ist 'pytest', nicht' test'. Sie sollten den von 'PyImport_ImportModule' zurückgegebenen Wert überprüft haben, bevor Sie ihn verwenden. – DyZ