使用CMake+pybind11构建Python调用的C++共享库遇错误求助
CMake与pybind11构建Python可调用C++共享库失败问题
CMake配置错误
无论通过命令行还是CMake GUI生成共享库,均出现相同配置失败问题:
- C/C++编译器识别失败,指定的MinGW gcc.exe无法编译测试程序
- 链接阶段中,MinGW的ld.exe无法识别MSBuild传递的
/ERRORREPORT:QUEUE等参数 - 存在
WindowsSDKDir属性未定义的警告
当前使用的CMakeLists.txt内容如下:
cmake_minimum_required(VERSION 3.30) set(CMAKE_C_COMPILER "C:/msys64/mingw64/bin/gcc.exe") set(CMAKE_CXX_COMPILER "C:/msys64/mingw64/bin/g++.exe") set(CMAKE_LINKER "C:/msys64/mingw64/bin/ld.exe") project(SudokuProject) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED True) include_directories(${CMAKE_SOURCE_DIR}/include) file(GLOB GEN_SOURCES "src/gen.cpp") file(GLOB CHECK_SOURCES "src/check.cpp") file(GLOB LOGGER_SOURCES "src/logger.cpp") file(GLOB WRAPPER_SOURCES "src/wrapper.cpp") add_library(gen SHARED ${GEN_SOURCES}) add_library(check SHARED ${CHECK_SOURCES}) add_library(logger SHARED ${LOGGER_SOURCES}) add_library(wrapper MODULE ${WRAPPER_SOURCES}) target_include_directories(wrapper PRIVATE ${CMAKE_SOURCE_DIR}/include) find_package(Python3 REQUIRED COMPONENTS Development) target_include_directories(wrapper PRIVATE ${Python3_INCLUDE_DIRS}) target_link_libraries(wrapper PRIVATE ${Python3_LIBRARIES}) target_include_directories(gen PRIVATE ${CMAKE_SOURCE_DIR}/include) target_include_directories(check PRIVATE ${CMAKE_SOURCE_DIR}/include) target_include_directories(logger PRIVATE ${CMAKE_SOURCE_DIR}/include) target_link_libraries(gen PRIVATE logger) target_link_libraries(check PRIVATE logger) set_target_properties(gen PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_target_properties(check PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_target_properties(logger PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) set_target_properties(wrapper PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
pybind11头文件问题
包含<pybind11/pybind11.h>时提示无法打开源文件Python.h:
- 最初通过pip安装pybind11,存在
<pybind11/stl.h>的错误 - 改用MinGW64安装pybind11后,
<pybind11/stl.h>的错误解决,但Python.h找不到的问题仍然存在
已尝试的排查步骤
- 先后从官网和MSYS2安装CMake
- 检查PATH环境变量配置
- 在CMake GUI中手动指定编译器路径
- 使用VSCode作为开发环境,不确定是否影响结果
内容的提问来源于stack exchange,提问作者Αθανάσιος Κολτσίδης
相关产品推荐
相关产品推荐

