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

C++ std::thread代码在项目目录编译运行时找不到入口点崩溃

问题原因

这是Windows下动态库加载优先级导致的版本不匹配问题,和你写的代码本身没有任何关系。
Windows加载EXE依赖的DLL时,会优先搜索EXE所在的当前目录,再去搜索系统路径、环境变量里的路径。你项目目录里存放的SFML、jsonCpp依赖自带了旧版本的MinGW运行时DLL(libstdc++-6.dll、libwinpthread-1.dll、libgcc_s_seh-1.dll),这些DLL是用和你当前g版本不一致的编译器编译的,里面的std::thread相关导出符号和你编译生成的EXE要找的符号对不上,就会弹出找不到程序入口点的报错。
空白目录下没有这些旧版本DLL,系统会自动加载你g
安装路径下和当前编译器版本完全匹配的运行时DLL,所以程序可以正常运行。

解决方法

按以下步骤操作即可修复:

  1. 打开命令提示符执行where g++,拿到你当前使用的g++程序的完整路径,进入该路径同级的bin目录,找到以下三个文件:
    • libgcc_s_seh-1.dll(如果你的MinGW是sjlj异常处理版本,对应文件名是libgcc_s_sjlj-1.dll)
    • libstdc++-6.dll
    • libwinpthread-1.dll
  2. 把这三个文件复制到你项目里生成EXE的目录,覆盖目录下已有的同名DLL文件
  3. 重新运行EXE即可正常执行,不会再出现入口点找不到的弹窗

可选优化方案

如果你不想每次都手动复制运行时DLL,可以在编译时添加静态链接参数,把C/C++运行时、线程库直接静态编译进EXE文件,就不会受目录下其他第三方DLL的版本影响,编译命令参考:

g++ -std=c++17 -o test test.cpp -pthread -static-libstdc++ -static-libgcc

另外注意你之前用的-std=c++0x是C11的早期实验性支持参数,现在建议替换为-std=c++17或更新的标准版本,标准库线程实现的稳定性更好。后续引入第三方预编译C库时,尽量保证第三方库的编译环境和你本地的MinGW大版本一致,否则还会出现类似的符号不匹配、运行时崩溃问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 09:06:18