为啥我所有的 C++ 程序都以 0xc0000139 退出?
Posted
技术标签:
【中文标题】为啥我所有的 C++ 程序都以 0xc0000139 退出?【英文标题】:Why are all my C++ programs exiting with 0xc0000139?为什么我所有的 C++ 程序都以 0xc0000139 退出? 【发布时间】:2016-03-02 08:22:15 【问题描述】:我正在尝试自学使用 C++ 编程,并在安装了 g++ 的 Windows 上使用 Cygwin。在我开始声明字符串变量之前,一切都很顺利。将字符串文字与 cout 一起使用不会导致任何问题,但是一旦我声明了字符串变量,程序将不再运行。
#include <iostream>
#include <string>
int main ()
std::string mystring = "Test";
std::cout << mystring;
return 0;
前面的代码编译没有问题,但是运行时没有输出。 GDB 为我提供了以下内容:
(gdb) run
Starting program: /cygdrive/c/Projects/CPP Test/string.exe
[New Thread 8416.0x2548]
[New Thread 8416.0x2510]
[New Thread 8416.0x1694]
[New Thread 8416.0x14f4]
[Thread 8416.0x1694 exited with code 3221225785]
[Thread 8416.0x14f4 exited with code 3221225785]
During startup program exited with code 0xc0000139.
据我所知,这是 DLL 的某种入口点问题,但我可能完全错了。
有谁知道我做错了什么或配置错误以及如何解决?
【问题讨论】:
您的代码编译良好,并在 Windows 10 上使用 gcc 4.8.1 为我提供了预期的输出“测试”。您是否在使用其他 C++ 程序时遇到同样的问题,或者它是否与您提供的代码有任何关系?另外,您使用哪些编译器标志来编译代码? 我没有玩太多,但我可以得到其他代码来编译。声明一个字符串变量似乎是导致问题的原因。我没有尝试声明任何其他类的变量,所以我不确定这是否是字符串或类的问题。我在使用 Cygwin 安装程序下载的 Win10 上使用 GCC 5.2.0-1。我不确定我使用什么标志,可能是默认标志。我用 g++ -g string.cpp -o string.exe 编译它 我将已安装的 GCC 版本更改为 4.9.3,我的程序现在可以正常编译和运行。多么奇怪…… 您可能已经更新了 GCC,但将库保留在 4.9.something 版本,它们是单独的包。二进制兼容性很脆弱。 【参考方案1】:好吧,我不确定到底是什么问题(如果有人知道我将不胜感激!),但我能够通过从 GCC 5.2.0 降级到 GCC 4.9.3 自己解决这个问题。
【讨论】:
您可以使用 Dependency Walker (dependencywalker.com) 之类的工具来诊断缺少 DLL 的问题。【参考方案2】:当 windows 无法加载 dll 文件时,会发出错误代码 0xc0000139。 一个可能的原因是安装了几个不同版本的编译器。 当您在 PC 上安装多个带有嵌入式 mingw 的软件时,可能会发生这种情况 - 例如,Visual C、Vagrant、Omnet++。
对我来说,一个简单的解决方法是以不同的方式运行程序:我没有从 GUI 运行我的 SW (Omnet++),而是从 mingwenv.cmd 命令行运行它。这样就解决了问题。
鲁道夫 2017 年 9 月 18 日上午 11:35:13 here 的回答中可能会找到更智能的解决方案。简而言之,他建议谨慎地临时更改系统的环境变量;因此,找到冲突的错误 dll,并删除它们。 在下面田斌的回答中,您可以看到无花果。解释它。
【讨论】:
【参考方案3】:我在使用 Windows 10、mingw 编译和 gcc-8.1.0 混合发布和调试版本时遇到了同样的问题。
我通过清理和重新编译所有内容来解决它:
cd $MY_BUILD
make clean
cmake $MY_SOURCE -DCMAKE_BUILD_TYPE=Debug
make -j4
gdb ./bin/my_program.exe # -> works
./bin/my_program.exe # -> no more problem
【讨论】:
以上是关于为啥我所有的 C++ 程序都以 0xc0000139 退出?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的讲师编写的所有 C 文件的第一行都以单个 # 开头?
进程在 code::blocks c++ 中返回 -1073741819 (0xC0000005)