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

如何配置CMake/GCC以使用C99标准编译项目?

解决libvorbis编译时C++注释不兼容C90的问题

问题根源

Ubuntu 24上的GCC 13对C语言标准的默认处理更严格,或者你的项目CMake配置没有明确指定C语言版本,导致libvorbis的C文件被强制以ISO C90标准编译——而C90不支持//这种C++风格的单行注释,这就是报错的核心原因。

之前的机器能正常编译,大概率是因为:

  • 旧机器的GCC版本较低(比如GCC 9及更早),默认对C文件采用gnu90标准(允许//作为扩展特性);
  • 旧机器的CMake配置或环境变量里隐式指定了更高的C标准,新系统没有继承这些设置。

解决方案

1. 为目标明确指定C标准

在项目的CMakeLists.txt中,找到包含libvorbis代码的编译目标,添加以下配置(二选一即可):

  • 采用严格C99标准(C99开始原生支持//注释):
target_compile_features(your_target_name PRIVATE c_std_99)
set(CMAKE_C_STANDARD_REQUIRED ON)
  • 采用带GNU扩展的C99标准(兼容性更好,适配老代码):
target_compile_features(your_target_name PRIVATE gnu99)

如果要全局生效(所有C文件统一用这个标准),可以在CMakeLists开头设置:

set(CMAKE_C_STANDARD 99)
set(CMAKE_C_EXTENSIONS ON) # 启用GNU扩展特性

2. 针对libvorbis子模块单独设置

如果libvorbis是通过add_subdirectory(libvorbis)作为子目录引入的,在引入前临时设置兼容标准,避免影响项目其他部分:

# 保存原有标准配置
set(OLD_C_STANDARD ${CMAKE_C_STANDARD})
set(OLD_C_EXTENSIONS ${CMAKE_C_EXTENSIONS})

# 为libvorbis设置兼容标准
set(CMAKE_C_STANDARD 99)
set(CMAKE_C_EXTENSIONS ON)

add_subdirectory(libvorbis)

# 恢复原有项目的标准配置
set(CMAKE_C_STANDARD ${OLD_C_STANDARD})
set(CMAKE_C_EXTENSIONS ${OLD_C_EXTENSIONS})

3. 临时编译时指定(快速验证)

如果不想修改CMake配置,可以在运行cmake时直接传递编译选项:

cmake .. -DCMAKE_C_FLAGS="-std=gnu99"

内容的提问来源于stack exchange,提问作者Omroth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 20:44:53