当 .exe 在 Windows 7 32 位上运行时,使用 GCC 编译的 C 程序会导致 NVTDM 错误

标签 c windows gcc windows-7

我正在尝试让 GCC/G++ 在通过 Cygwin 安装的 32 位 Windows 7 计算机上运行。我可以很好地编译和链接我的基本“Hello World”程序,但是当我尝试运行它时,我收到“NVTDM.EXE 已停止工作”错误。

过去一个小时左右,我一直在谷歌上搜索,我所能找到的只是一堆关于 NTVDM 应该运行旧的 16 位遗留代码这一事实的引用,显然 Windows XP 补丁破坏了它。

出于好奇,我尝试使用 -m32 编译器标签强制编译 32 位代码,并使用 32 位 GCC/MinGW 可执行文件和 64 位可执行文件进行编译,每次都会遇到相同的 NVTDM 错误时间。关于出了什么问题有什么想法吗?

源代码:

#include <stdio.h>
int main(void)
{
  printf("Hello World!\n");

  return 0;
}

使用的基本 GCC 编译行:

gcc -Wall -c HelloWorld.c -o HelloWorld.exe

错误详细信息:

Problem signature:
Problem Event Name: APPCRASH
Application Name: ntvdm.exe
Application Version: 6.1.7600.16385
Application Timestamp: 4a5bc158
Fault Module Name: StackHash_2264
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 00000000
Exception Code: c0000005
Exception Offset: 00000229
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 2264
Additional Information 2: 2264db07e74365624c50317d7b856ae9
Additional Information 3: 875f
Additional Information 4: 875fa2ef9d2bdca96466e8af55d1ae6e

最佳答案

如果您通过 Cygwin 安装了 GCC 并将其称为 gcc,则您不是编译 MinGW/ native 可执行文件,而是编译 Cygwin 可执行文件。如果您需要非 Cygwin 可执行文件,则需要安装并调用 {i686,x86_64}-w64-mingw32-gcc

运行时崩溃似乎很神秘,但这可能是由于缺少 Cygwin DLL(这当然是 Cygwin 应用程序所必需的。但这不是您想要的,所以请尝试上述操作。

关于当 .exe 在 Windows 7 32 位上运行时,使用 GCC 编译的 C 程序会导致 NVTDM 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33253909/

相关文章:

c - 为什么变量 c 在应该打印 4 时打印为 3?

c - 堆栈链表,带功能的遍历器链表

windows - 在 Windows 操作系统上编写 Gnuplot 脚本

c - 如何自动获取常量字符串的第一个字符作为常量字符?

C : enQueue : How does create a new pointer to the tail?

c - 导致 C 崩溃的数组大小

c - 开始使用支持 UNICODE 的 WINAPI 编程

c++ - 获取路径并附加文件名

c++ - 静态常量类成员声明

c++ - 关于 linux 中的动态缩放,程序在时钟周期中的意外执行时间