运行C++中的Python代码无法找到pyUnoDeO.FooScript

2024-05-21 14:52:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试用c++运行python代码

#include <python3.7/Python.h>
// PYTHON START
Py_Initialize();
PyObject *module_name = PyUnicode_FromString("plotter");
PyObject *module = PyImport_Import(module_name);
Py_DECREF(module_name);

if (module != nullptr) {
    PyObject *py_function = PyObject_GetAttrString(module, "plot_data");

    //call the python and pass the data generated in C
    //------------------------------------------------------------------------------------------------------
    if (py_function && PyCallable_Check(py_function)) {
        pid_t pid = fork();
        if (pid == 0) {
            PyObject *res = PyObject_CallFunctionObjArgs(py_function, q);
        }
    }
}

我以前从未这样做过,但我不认为这是问题所在,因为我无法构建代码。 我的错误是:

^{pr2}$

我的cmake文件看起来像:

cmake_minimum_required(VERSION 3.14)
project(krpc)

set(CMAKE_CXX_STANDARD 11)


link_libraries("-lkrpc -lprotobuf -lpthread")
find_package(PythonLibs)
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_DIRS})

add_executable(krpc test.cpp)

target_link_libraries(krpc ${PYTHON_LIBRARIES})

编辑:我的cmake输出如下所示:

/snap/clion/81/bin/cmake/linux/bin/cmake -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - Unix Makefiles" /home/alex/Workspace/Clion/krpc
-- PYTHON_LIBRARIES: /usr/lib/x86_64-linux-gnu/libpython2.7.so
-- Configuring done
-- Generating done
-- Build files have been written to: /home/alex/Workspace/Clion/krpc/cmake-build-debug

[Finished]

我看过cmake中的find_packages(),如果我有普通的python,它会找到python2.7,但我想要3.7。我好像找不到我要找的东西。在


Tags: the代码namepycmakelibrariesdataif
2条回答

将所需的cmake更改为3.7.2版,然后清理项目的缓存后,该问题已得到修复。在

你的链接器试图在中查找PyUnicode_FromStringlibpython.so. 它是Python2,它没有PyUnicode_FromString(它只有非unicode PyString_FromString)。在

在CMakeLists.txt文件示例:

cmake_minimum_required(VERSION 3.14)
project(krpc)

set(CMAKE_CXX_STANDARD 11)


link_libraries("-lkrpc -lprotobuf -lpthread")

add_executable(krpc test.cpp)

target_link_libraries(krpc python3.7m)

相关问题 更多 >