You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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,提问作者Αθανάσιος Κολτσίδης

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 16:48:26