ZBLOG

C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Tools\MSVC\14.32.31326\include\stdatomic.h(15,2): error: is not yet supported when compiling as C, but this is planned for a future release. #error is not ye...

这个错误表明你在编译 FFmpeg(或相关项目)时,MSVC 编译器无法正确处理 C11 的 <stdatomic.h>,导致 atomic_int 等原子类型未定义。以下是解决方案:


1. 根本原因

  • MSVC(Microsoft Visual C++)对 C11/C17 的原子操作支持不完整,尤其是 <stdatomic.h>
  • FFmpeg 的部分代码(如 error_resilience.h)依赖 C11 原子操作,但你的项目正在以 C 模式(而非 C++)编译这些文件。

2. 解决方案

方案 A:强制使用 C++ 编译器处理该文件(推荐)

修改构建系统配置,将涉及原子操作的 .c 文件用 C++ 编译器编译:

  • CMake: 在 CMakeLists.txt 中单独设置该文件的编译语言:

    1. set_source_files_properties(libavcodec/error_resilience.c PROPERTIES LANGUAGE CXX)

  • Ninja/GN: 如果是 WebRTC/Chromium 项目,修改 BUILD.gn

    1. if (is_win) {
    2. sources += [ "libavcodec/error_resilience.c" ]
    3. # Windows下强制用C++编译
    4. cflags_c = []
    5. cflags_cc = [ "/TP" ]
    6. }

方案 B:替换为 MSVC 兼容的原子实现

如果无法切换编译器,可以临时修补 FFmpeg 头文件:

  1. // error_resilience.h (修改前)
  2. #include <stdatomic.h>
  3. atomic_int error_count;
  4. // error_resilience.h (修改后)
  5. #ifdef _MSC_VER
  6. #include <windows.h>
  7. #define atomic_int LONG volatile // Windows下用volatile LONG模拟
  8. #else
  9. #include <stdatomic.h>
  10. #endif

注意:此方法非严格线程安全,仅适用于简单场景。

方案 C:切换到 Clang-cl

Clang-cl(LLVM for MSVC ABI)支持完整的 C11/C17:

  1. 安装 LLVM:
    LLVM官网下载并安装。
  2. 指定工具链:
    1. cmake -G "Ninja" -DCMAKE_C_COMPILER=clang-cl -DCMAKE_CXX_COMPILER=clang-cl ..

方案 D:升级 FFmpeg

较新版本的 FFmpeg可能已修复此问题。尝试更新子模块:

  1. git submodule update --init --recursive third_party/ffmpeg

3. WebRTC/Ninja特定修复

如果是 WebRTC/Ninja构建问题,检查以下配置:

  1. GN args (args.gn):
    1. is_clang = true # Windows下启用Clang工具链
    2. use_custom_libcxx = false # MSVC STL兼容模式
  2. Ninja命令显式指定 Clang:
    1. ninja -v -d keepdepfile your_target -w dupbuild=warn

4.验证是否解决

重新构建后检查是否仍有 atomic_int相关错误。若仍有问题,请提供更多上下文(如完整的构建日志或项目结构)。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8060

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?