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

在C++中嵌入Python时遭遇cpython/pyatomic_gcc.h文件缺失的编译错误

在C++中嵌入Python时遭遇cpython/pyatomic_gcc.h文件缺失的编译错误

我正在尝试在C++里调用Python,但导入Python头文件时遇到了编译错误——明明cpython/pyatomic_gcc.h文件就在对应的目录里,编译器却一直提示找不到它!


错误信息:

cmd /c chcp 65001>nul && C:\msys64\ucrt64\bin\g++.exe -fdiagnostics-color=always -g C:\Users\21211433\Desktop\Code\C++\First\src\python.c -o C:\Users\21211433\Desktop\Code\C++\First\src\python.exe
In file included from C:/Users/21211433/AppData/Local/Programs/Python/Python313/include/pyatomic.h:9,
                 from C:/Users/21211433/AppData/Local/Programs/Python/Python313/include/Python.h:70,
                 from C:\Users\21211433\Desktop\Code\C++\First\src\python.c:2:
C:/Users/21211433/AppData/Local/Programs/Python/Python313/include/cpython/pyatomic.h:532:12: fatal error: cpython/pyatomic_gcc.h: No such file or directory
  532 | #  include "cpython/pyatomic_gcc.h"
      |            ^~~~~~~~~~~~~~~~~~~~~~~~

我的代码(Python.cpp):

#define PY_SSIZE_T_CLEAN
#include <C:/Users/21211433/AppData/Local/Programs/Python/Python313/include/Python.h>

int
main()
{
    return 0;
}

我确认过pyatomic_gcc.h确实在C:/Users/21211433/AppData/Local/Programs/Python/Python313/include/cpython/目录下,但编译器就是识别不到它。


可能的解决办法

我给你梳理几个大概率能解决问题的步骤,你可以逐一尝试:

  • 1. 修正编译命令的头文件搜索路径
    你现在直接在代码里硬编码了Python.h的绝对路径,但编译器不知道要去Python的include根目录下找嵌套的子目录文件(比如cpython里的内容)。正确的做法是在编译命令中用-I参数指定Python的include目录,同时简化代码里的include语句:
    编译命令改成这样:

    g++ -g -IC:/Users/21211433/AppData/Local/Programs/Python/Python313/include C:\Users\21211433\Desktop\Code\C++\First\src\python.c -o C:\Users\21211433\Desktop\Code\C++\First\src\python.exe -LC:/Users/21211433/AppData/Local/Programs/Python/Python313/libs -lpython313
    

    代码里的include改成相对路径形式:

    #define PY_SSIZE_T_CLEAN
    #include <Python.h>
    

    这样编译器会从你指定的根目录开始搜索,嵌套的cpython/pyatomic_gcc.h自然就能被找到。

  • 2. 检查架构兼容性
    确保你用的Python版本和MSYS2的g编译器架构匹配——比如g是64位的,Python也必须是64位安装包,32位和64位混用很容易出现这类路径/文件识别问题。

  • 3. 验证头文件包含逻辑
    错误里的#include "cpython/pyatomic_gcc.h"是相对路径包含,编译器会优先从当前头文件所在的目录(也就是pyatomic.h所在的cpython目录)找,但如果编译时没指定Python的include根目录,编译器的搜索上下文就不对,自然找不到。所以一定要通过-I参数把Python的include根目录加入搜索路径。

备注:内容来源于stack exchange,提问作者LEBG

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 03:20:32