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

WSL下g++编译含<chrono>/<thread>头文件时出现内部编译错误

WSL下编译C++程序触发GCC内部段错误问题

在WSL环境编译C++多线程程序时遇到GCC内部段错误,具体表现及排查情况如下:

问题复现代码1(多线程程序)

#include <thread>

void f() {}

int main()
{
std::thread t(f);
t.join();
return 0;
}

编译错误信息

In file included from /usr/include/c++/9/chrono:40,
                 from /usr/include/c++/9/thread:38,
                 from test.cpp:1:
/usr/include/c++/9/limits:1665:7: internal compiler error: Segmentation fault
 1665 |       min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MIN__; }
      |       ^~~
0x7f7d7a46b08f ???
        /build/glibc-SzIz7B/glibc-2.31/signal/../sysdeps/unix/sysv/linux/x86_64/sigaction.c:0
0x7f7d7a44c082 __libc_start_main
        ../csu/libc-start.c:308

简化复现代码(仅包含)

进一步测试发现,仅引入<chrono>头文件的空程序也会触发相同错误:

#include <chrono>

int main()
{
    return 0;
}

已尝试的无效操作

  • 使用-pthread -std=c++17参数编译
  • 更新并重新安装g++

可行排查/解决方向

  • 切换到WSL2:WSL1对部分Linux工具兼容性较差,执行wsl --set-version <分发版名称> 2切换(需先启用WSL2系统功能)
  • 清理GCC缓存:删除~/.cache/gcc目录,避免缓存损坏导致编译异常
  • 升级系统分发版:比如将Ubuntu 20.04升级到22.04,获得更高版本的GCC(9.x→11.x),修复已知编译器bug
  • 检查磁盘空间:确保WSL挂载的磁盘有足够剩余空间,避免编译时缓存写入失败
  • 替换编译器:尝试用clang编译,命令为clang++ test.cpp -o test -pthread -std=c++17

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:01:07