CMake配置时C/C++编译器识别未知及损坏问题求助
先把你遇到的报错信息贴出来方便定位:
-- The C compiler identification is unknown
-- The CXX compiler identification is unknown
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- broken
CMake Error at /home/pranto/.local/lib/python2.7/site-packages/cmake/data/share/cmake-3.12/Modules/CMakeTestCCompiler.cmake:52 (message):
The C compiler "/usr/bin/cc"
我碰到过好几次类似的问题,结合你的环境(CMake 3.12.0 + GCC 7.4.0),给你几个针对性的排查和解决步骤,应该能搞定:
1. 检查cc/c++符号链接是否正确关联GCC
CMake默认会找/usr/bin/cc作为C编译器,但如果这个符号链接没指向你的GCC 7.4.0,就会出问题。先查一下:
ls -l /usr/bin/cc /usr/bin/c++
如果输出里cc不是指向/usr/bin/gcc(或者gcc-7),c++不是指向/usr/bin/g++(或者g++-7),就重新创建链接:
sudo rm /usr/bin/cc /usr/bin/c++ sudo ln -s /usr/bin/gcc /usr/bin/cc sudo ln -s /usr/bin/g++ /usr/bin/c++
2. 彻底清理CMake缓存,从头构建
之前的构建缓存可能残留了错误配置,导致CMake一直走老路。进入你的项目构建目录,删掉所有CMake生成的文件:
cd your-build-folder # 换成你的实际构建目录 rm -rf CMakeCache.txt CMakeFiles/ Makefile
然后重新运行CMake试试。
3. 直接给CMake指定编译器路径
如果符号链接没问题,但CMake还是识别不到,那就跳过自动检测,直接告诉它用你的GCC:
cmake .. -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++
这里的..是你的项目源码目录,根据实际情况调整。
4. 先确认GCC本身能正常工作
有时候问题不在CMake,而是GCC本身依赖缺失导致无法运行。先测试一下GCC能不能编译最简单的程序:
echo "int main() { return 0; }" > test.c gcc test.c -o test ./test
如果这个过程报错,说明GCC本身有问题,以Ubuntu/Debian为例,可以重新安装GCC 7.4的完整包:
sudo apt-get install --reinstall gcc-7 g++-7
5. 考虑升级CMake版本
CMake 3.12.0是2018年的老版本了,虽然官方说支持GCC 7.x,但可能存在一些兼容性小bug。如果前面的方法都没用,可以试试升级到一个更新的稳定版本(比如3.20以上),新版本的编译器检测逻辑更健壮。
内容的提问来源于stack exchange,提问作者Pranto




