Ubuntu编译LLVM 3.5.1报错:不识别-fcolor-diagnostics命令行选项
Ubuntu环境编译LLVM 3.5.1触发
-fcolor-diagnostics参数不识别报错 操作背景
- 编译目标:LLVM 3.5.1旧版本,源码取自LLVM官方3.5.1版本发布页
- 参考依据:LLVM官方入门构建指南
- 运行环境:Ubuntu虚拟机,系统预装GCC版本为
11.2.0 (Ubuntu 11.2.0-19ubuntu1) - 已执行流程:
- 下载对应版本LLVM源码
- 创建独立的构建目录
- 执行CMake配置命令:
cmake -G Ninja -DCMAKE_BUILD_TYPE=debug ../llvm,该步骤无异常 - 执行构建命令
cmake --build .启动编译后立即报错,构建流程终止
核心报错
cc: error: unrecognized command-line option '-fcolor-diagnostics'
完整编译错误日志:
[1/1441] Building C object lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o FAILED: lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o /usr/bin/cc -DGTEST_HAS_RTTI=0 -D_GNU_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -I/home/isaac/llvm/build/lib/Support -I/home/isaac/llvm/llvm/lib/Support -I/home/isaac/llvm/build/include -I/home/isaac/llvm/llvm/include -fPIC -Wall -W -Wno-unused-parameter -Wwrite-strings -Wmissing-field-initializers -pedantic -Wno-long-long -Wno-comment -fcolor-diagnostics -g -MD -MT lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o -MF lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o.d -o lib/Support/CMakeFiles/LLVMSupport.dir/ConvertUTF.c.o -c /home/isaac/llvm/llvm/lib/Support/ConvertUTF.c cc: error: unrecognized command-line option 'fcolor-diagnostics'
故障原因
-fcolor-diagnostics是Clang编译器专属的彩色诊断输出参数,LLVM 3.5.1发布时间较早,其内置的CMake构建脚本对高版本GCC的编译器类型检测存在缺陷,错误地为GCC追加了Clang专属编译参数,GCC 11无法识别该参数直接触发报错。
解决方法
- 方案一:直接关闭彩色诊断输出(最简便)
先清空当前构建目录下的CMakeCache.txt文件和所有CMake生成的中间缓存,重新执行CMake配置时追加参数关闭彩色诊断特性:
配置完成后重新执行cmake -G Ninja -DCMAKE_BUILD_TYPE=debug -DLLVM_ENABLE_COLOR_DIAGNOSTICS=OFF ../llvmcmake --build .即可继续编译流程。 - 方案二:保留彩色输出,替换为GCC兼容参数
清空CMake缓存后,配置阶段手动指定编译标志,将Clang专属的彩色参数替换为GCC支持的-fdiagnostics-color=always:cmake -G Ninja -DCMAKE_BUILD_TYPE=debug -DCMAKE_C_FLAGS="-fdiagnostics-color=always" -DCMAKE_CXX_FLAGS="-fdiagnostics-color=always" ../llvm - 额外提示:LLVM 3.5.1和GCC 11存在较多C++语法层面的兼容问题,如果后续编译过程中触发其他语法类报错,可以将GCC版本降级到4.8~5.x区间,该版本区间的GCC对旧版LLVM的适配性更好。
内容的提问来源于stack exchange,提问作者Isaac Jacobson
相关产品推荐
相关产品推荐

