WSL2 Ubuntu下CMake编译报错:无法找到__config_site文件
解决WSL2 Ubuntu中g++编译找不到__config_site的问题
问题根源
你的编译错误是因为头文件路径优先级冲突:系统默认会优先搜索/usr/local/include目录,但这个目录下存在不完整的标准库头文件(比如__config依赖的__config_site未生成,只有模板文件__config_site.in),导致g++ 11.3调用系统标准库时,错误加载了/usr/local/include下的损坏头文件,而非/usr/include/c++/11下的正常系统头文件。
解决方案
1. 临时修复(仅针对当前项目)
修改项目的CMakeLists.txt,强制编译器优先使用系统标准库的头文件路径:
project(Test) set(CMAKE_CXX_STANDARD 20) # 添加这两行,指定系统gcc标准库的优先搜索路径 include_directories(BEFORE /usr/include/c++/11) include_directories(BEFORE /usr/include/x86_64-linux-gnu/c++/11) add_executable(Test main.cpp)
重新执行cmake .. && make即可编译通过。
2. 永久修复(清理冲突文件)
如果不需要/usr/local/include下的自定义头文件,直接清理该目录下的冲突文件:
# 删除/usr/local下的冲突标准库文件 sudo rm -rf /usr/local/include/__config* /usr/local/include/stdlib.h
如果之前手动编译安装过gcc,还需要检查/usr/local/bin和/usr/local/lib下的gcc相关文件,比如删除/usr/local/bin/g++、/usr/local/bin/gcc,确保系统默认的/usr/bin/g++(11.3版本)被优先调用。
3. 验证修复
用g++直接编译测试文件验证:
g++ -std=c++20 main.cpp -o test ./test
无报错则说明问题已解决。
内容的提问来源于stack exchange,提问作者Andrzej Sołtysik
相关产品推荐
相关产品推荐

