Python 未定义的符号:PyExc_递归错误
cmake的命令是:Python 未定义的符号:PyExc_递归错误,python,c++,numpy,cmake,pybind11,Python,C++,Numpy,Cmake,Pybind11,cmake的命令是: cmake_minimum_required(VERSION 2.8) project(testproject C CXX) set (CMAKE_CXX_STANDARD 14) set(CMAKE_VERBOSE_MAKEFILE OFF) set(CMAKE_JS_INC "$ENV{HOME}/.cmake-js/node-x64/v10.15.3/include/node;/home/project/code/node_modules/nan") set(C
cmake_minimum_required(VERSION 2.8)
project(testproject C CXX)
set (CMAKE_CXX_STANDARD 14)
set(CMAKE_VERBOSE_MAKEFILE OFF)
set(CMAKE_JS_INC "$ENV{HOME}/.cmake-js/node-x64/v10.15.3/include/node;/home/project/code/node_modules/nan")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Release)
#------ PACKAGES ------
find_package(OpenCV 3 REQUIRED)
#---------------------------
#------ CORE ----
file(GLOB SOURCE_FILES "src/*.cpp" "src/*.h" "nan/*.cpp" "nan/*.h"
"drivers/*.cpp" "drivers/*.h"
"drivers/webstream/*.cpp" "drivers/webstream/*.h"
)
add_library(${PROJECT_NAME} SHARED ${SOURCE_FILES})
target_include_directories(${PROJECT_NAME} PRIVATE ${CMAKE_JS_INC}
PUBLIC "."
)
set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "" SUFFIX ".node")
#---------------------------
#------ EVAL PACKAGES ------
include_directories( ${OpenCV_INCLUDE_DIRS} )
target_link_libraries(${PROJECT_NAME} ${OpenCV_LIBS})
#---------------------------
# c-python config
include_directories(${PROJECT_NAME} SYSTEM PUBLIC "/usr/include/python3.5/")
include_directories(${PROJECT_NAME} SYSTEM PUBLIC "/usr/lib/python3.5/")
include_directories(${PROJECT_NAME} SYSTEM PUBLIC "/usr/local/lib/python3.5/")
include_directories(${PROJECT_NAME} SYSTEM PUBLIC "/usr/local/lib/python3.5/dist-packages/numpy/core/include/")
add_library(python_c SHARED IMPORTED)
set_target_properties(python_c PROPERTIES IMPORTED_LOCATION "/usr/lib/x86_64-linux-gnu/libpython3.5m.so")
target_link_libraries(
${PROJECT_NAME}
PUBLIC python_c
)
#add_executable
add_executable(code pawan.cpp)
target_link_libraries(code
PUBLIC python_c
PUBLIC ${OpenCV_LIBS})
通过cmake,我还创建了一个可执行文件“代码”。可执行文件工作正常。使用通过cmake创建的代码库时会出现错误
这是pawan.cpp文件
cmake -DPYTHON_EXECUTABLE:FILEPATH=/usr/bin/python3.5 ..
#包括“python3.5/Python.h”
#包括
#包括
使用名称空间std;
虚无乐趣(){
cout感谢完整的cmake文件。在这里,您构建的应用程序包括Python3.5并与之链接。但是,来自numpy的错误来自于\u multiarray\u umath.cpython-38-x86\u 64-linux-gnu。因此
,所以是为Python3.8构建的,可能是在b/c环境中拾取的。c-exte为不同版本的CPython构建的版本通常不兼容
除非您特别需要Python3.5,否则我建议您确保在您的环境中正确设置它(即通过将PATH
和LD\u LIBRARY\u PATH
指向Python3.5版本)并且首先安装了numpy。但是如果3.8可以,您可以让cmake从环境中获取它。类似这样:
#include "python3.5/Python.h"
#include <iostream>
#include <string>
using namespace std;
void fun() {
cout << "using cpython......................................................................00" << endl;
Py_Initialize();
PyRun_SimpleString ("print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^11')");
// if(PyArray_API == NULL){
// _import_array();
// }
PyRun_SimpleString ("import numpy; print(numpy.__file__)");
PyRun_SimpleString ("print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22')");
}
并将“${PYTHON\u INCLUDE\u PATH}”添加到您的项目INCLUDE和“{code>”{$PythonLibs}”
将您的目标链接到。欢迎使用Stackoverflow!请描述您已尝试如何解决此问题。您是否尝试了错误消息中列出的所有建议?@squareskittles按照您的建议更新了问题。PyExc_递归错误表示函数(在本例中可能是导入
)调用自身,并且这样做的次数“太多”。在运行其他代码之前,是否使用pybind11(pybind11::module::import(“numpy”)
)独立导入numpy?如果不是,是否调用numpy的初始化(import\u array();
)?是否您也将文件命名为numpy.py
?以上两个都给出了相同的错误。@WimLavrijsenSorry,麻烦了。我已经更新了问题。之前我添加了在尝试python3.8和后来添加的cmakelists.txt文件时出现的错误,当时我正在尝试python3.5。我已经更新了任务ion和它使用Python 3.5m,错误仍然存在。它选择的numpy也是Python 3.5m。我完全切换到了cpython api,但它仍然不工作。任何评论都会非常有用。期待答案。谢谢。老实说,我仍然打赌你在混合两个Python(3.5m和3.5),当您从/usr
和/usr/local
混合中获取包含和库时。这是什么python-c“将distutils.sysconfig导入为sc;print(sc.get_config_var('incldirestomake')”
显示?(即目录匹配吗?)谢谢你的帮助。我发现有一些链接问题。中的解决方案对我有效。
#include "python3.5/Python.h"
#include <iostream>
#include <string>
using namespace std;
void fun() {
cout << "using cpython......................................................................00" << endl;
Py_Initialize();
PyRun_SimpleString ("print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^11')");
// if(PyArray_API == NULL){
// _import_array();
// }
PyRun_SimpleString ("import numpy; print(numpy.__file__)");
PyRun_SimpleString ("print('^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^22')");
}
find_package(PythonInterp)
if (PYTHONINTERP_FOUND)
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sys;sys.stdout.write(sys.version[:3])"
OUTPUT_VARIABLE PYTHON_VERSION)
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "import sys;sys.stdout.write(sys.prefix)"
OUTPUT_VARIABLE PYTHON_PREFIX)
set (CMAKE_PREFIX_PATH ${CMAKE_PREFIX_PATH} ${PYTHON_PREFIX})
endif()
set(Python_ADDITIONAL_VERSIONS ${PYTHON_VERSION})
find_package(PythonLibs REQUIRED)
if (NOT PYTHONLIBS_FOUND)
message(FATAL_ERROR "PythonLibs package not found and python component required")
endif()