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

Ubuntu下用MinGW交叉编译Windows C++程序遇标准库错误求助

解决MinGW交叉编译Windows目标时C++线程库相关错误

核心问题原因

Ubuntu默认仓库的MinGW分为win32和posix两种线程模型,默认的win32模型对C++标准库的线程支持不完整,导致std::this_thread、std::condition_variable这类符号无法被识别。

具体解决步骤

  • 安装完整的posix线程模型MinGW包
    Ubuntu默认的g++-mingw-w64-x86-64是win32线程版本,需要安装对C++线程支持更完整的posix版本:

    sudo apt install g++-mingw-w64-x86-64-posix
    
  • 切换到posix版本的编译器命令
    替换原编译命令中的x86_64-w64-mingw32-g++为x86_64-w64-mingw32-g++-posix,该版本完整兼容C++11及以上的线程标准库特性。

  • 调整编译选项
    添加-pthread参数(小写p),它会同时启用线程相关预定义宏并链接正确的线程库,比单独使用-lpthread更可靠;同时指定Windows目标版本避免头文件兼容性问题:

    x86_64-w64-mingw32-g++-posix -std=c++17 -D_WIN32_WINNT=0x0601 -pthread -o main.exe main.cpp -lws2_32 -static-libgcc -static-libstdc++ -lcrypto -I./Crow/include -I./json/include -I./tinyfiledialogs ./tinyfiledialogs/tinyfiledialogs.c -I./asio/include
    
  • 验证最小示例编译
    用调整后的命令编译你提供的最小复现代码,可快速验证问题是否解决:

    x86_64-w64-mingw32-g++-posix -std=c++17 -D_WIN32_WINNT=0x0601 -pthread -o main.exe main.cpp -lws2_32 -static-libgcc -static-libstdc++ -lcrypto -I./Crow/include -I./asio/include
    

额外排查点

如果安装posix版本后仍有问题,可通过which x86_64-w64-mingw32-g++-posix确认命令路径是否正确,避免系统中多个MinGW版本冲突导致调用了错误的编译器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 15:52:11