GCC编译C++程序时声明string变量后无运行输出的异常问题咨询
C++代码运行无输出异常分析
问题复现
出问题的代码如下:
#include <iostream> #include <string> using namespace std; int main() { string kek = "kek"; cout << "test" << endl; return 0; }
编译环境为Windows 10 + gcc 8.1.0,编译无报错,运行无运行时错误,但控制台无任何输出。
将代码中string kek = "kek";一行注释后重新编译运行,控制台可正常输出test。
补充测试:在Linux bash环境下编译运行也复现了相同问题。
问题原因
这是MinGW 8.1.0版本的已知原生bug,触发条件为代码中同时使用std::string和标准输出流:
该版本libstdc++静态库的全局初始化逻辑存在冲突,当链接了std::string相关符号后,标准输出流的初始化会被异常拦截,导致cout输出的内容没有被正确刷新到控制台缓冲区。注释string声明后,编译时不会链接string相关符号,自然避开了初始化冲突,输出恢复正常。
修复方案
任选其一即可:
- 升级MinGW到9.0及以上版本,该bug在后续版本中已经被官方修复
- 编译时添加动态链接libstdc++的参数,避免触发静态库的初始化冲突:
g++ 你的源文件名.cpp -o 输出程序名 -shared-libstdc++ - 在main函数第一行手动触发标准流同步:
int main() { cout.sync_with_stdio(true); // 后续原有逻辑 }
内容的提问来源于stack exchange,提问作者Mtkel N
相关产品推荐
相关产品推荐

