为什么我所有的 C++ 程序都以 0xc0000139 退出?

Zel*_*aze 7 c++ crash cygwin

我正在尝试自学用 C++ 编程,并在安装了 g++ 的 Windows 上使用 Cygwin。一切都很顺利,直到我开始声明字符串变量。将字符串文字与 cout 一起使用不会引起任何问题,但是一旦我声明了一个字符串变量,程序将不再运行。

#include <iostream>
#include <string>

int main ()
{
  std::string mystring = "Test";
  std::cout << mystring;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

前面的代码编译没有问题,但运行时没有输出。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.
Run Code Online (Sandbox Code Playgroud)

从我设法收集的信息来看,这是 DLL 的某种入口点问题,但我可能完全错了。

有谁知道我做错了什么或我配置错误以及如何解决它?

Ita*_*hen 5

当 Windows 无法加载 dll 文件时,会发出错误代码 0xc0000139。可能的原因是安装了多个不同版本的编译器。当您在 PC 上安装多个带有嵌入式 mingw 的软件(例如 Visual C、Vagrant、Omnet++)时,可能会发生这种情况。

对我来说,一个简单的解决方法是以不同的方式运行程序:我不是从 GUI 运行我的软件 (Omnet++),而是从 mingwenv.cmd 命令行运行它。这解决了问题。

更聪明的解决方案可以在 Rudolf 在 2017 年 9 月 18 日上午 11:35:13 的回答中找到。简而言之,他建议小心地临时更改系统的环境变量;因此,找到冲突的错误 dll,并将其删除。下面田斌的回答可以看图。解释一下。


Zel*_*aze 2

好吧,我不确定问题到底是什么(如果有人知道我会很感激!),但我能够通过从 GCC 5.2.0 降级到 GCC 4.9.3 自己解决这个问题。

  • 您可以使用 Dependency Walker (http://www.dependencywalker.com/) 等工具来诊断缺少 DLL 的问题。 (4认同)