【问题标题】:Cannot run C program compiled with MinGW Dev-C++ on 64bit Vista无法在 64 位 Vista 上运行使用 MinGW Dev-C++ 编译的 C 程序
【发布时间】:2011-09-21 21:38:39
【问题描述】:

几天前,我在使用 C++ 编程后开始使用 C 编程,但是,我的 Windows Vista 64 位机器无法创建 C 项目。我用 MinGW Dev-C++ 编译器重新编译了代码没有问题。

但是,当我运行代码时,我收到以下错误:

不支持的 16 位应用程序

由于与 64 位版本的 Windows 不兼容,程序或功能 "\??\C:\Dev-Cpp\gcc.exe" 无法启动或运行。请联系软件供应商询问是否有 64 位 Windows 兼容版本可用。

这是使用 C++ 编译器编译 C 代码的问题吗?

【问题讨论】:

  • 什么是exact错误信息,你使用什么编译器,你在什么平台上?
  • 您使用的是什么编译器或 IDE?
  • 只是为了说明这一点,您可以将 C 编译为 64 位。现在编译器和错误信息是什么?
  • 根据你粘贴的错误,它与你的代码无关——你的系统不喜欢你的 gcc.exe 二进制文件。
  • 我对 gcc (g++) 4.5.2 有同样的问题。当我尝试使用 OpenMpi 编译代码时,我总是

标签: c++ c windows-vista 64-bit mingw


【解决方案1】:

我在意外添加-c 开关时收到相同的错误消息,该开关告诉编译器不要链接可执行文件。卸下开关使其再次工作。

> gcc --help

...

-c Compile and assemble, but do not link

【讨论】:

  • 我也犯了同样的错误。
【解决方案2】:

这是 Mingw 的某种问题。问题不是因为您使用的是旧编译器。最新版本的 Mingw 编译器发生在我身上。 我找到了一种可能对某些人有所帮助的解决方法。使用 Makefile 构建我的项目时会出现此问题。如果我通过命令行手动构建它,它工作正常,生成的 .exe 执行没有问题。

通过手动编译,我的意思是例如对于 c++:

c:\mydir> g++ source1.cpp source2.cpp -o myprog.exe

我的应用程序非常小,我只需要几个源来测试一些更改。如果您有一个带有 Makefile 的更复杂的应用程序,此解决方法可能对您没有帮助。

【讨论】:

    【解决方案3】:

    我在使用 Notepad++ 时遇到了同样的错误,我发现了我犯的错误。我试图从头文件创建一个可执行文件。

    文件需要保存为file.cpp或file.c,而不是file.hpp或file.h

    我也在切换语言,但是从 C 语言切换到 C++

    【讨论】:

      【解决方案4】:

      您看到的错误来自使用 Windows 64 位不提供向后兼容性的古老(如 16 位 Windows 3.1 时代)软件。这与 C 或 C++ 无关,只是一个非常古老的编译器。

      您可以使用 XP 模式安装 Windows 7,它提供了在 Windows 7 下几乎无缝运行的虚拟 32 位 XP 机器,或其他一些 32 位虚拟化解决方案,或者下载更新版本的 gcc.exe 或其他一些不到 20 年的编译器:

      请参阅cygwinMingGWVisual Studio Express

      【讨论】:

      • VS 甚至不支持 C99 和 Cygwin,它不适合开发。
      • @user:如果 Sheldon 使用的是 16 位编译器,那么 C99 支持肯定不是优先事项,因此 VS 与 Windows 上的其他任何东西一样好。我很好奇你为什么声称 Cygwin 不是用于开发的?
      • 当你的操作系统有一个非常好的编译器 (MinGW) 时,你会建议有人用虚拟机用 C 语言开发吗?此外,您关心的是 OP 是新手,但您只建议使用 1 个好的编译器,在我看来,QtCreator 在任何情况下对新手来说都是更好的联盟qt-project.org/downloads#qt-creator
      【解决方案5】:

      我遇到了类似的问题,正是 msiemens 的回答给了我解决问题的提示。它与 MinGW 版本无关。只是我的 .exe 文件实际上不是可执行文件。

      我试图用命令编译和构建:

      > g++ -c cpptest.cpp -o cpptest.exe
      

      但是使用 -c,g++ 只是编译而不链接。生成的 cpptest.exe 只是名称不同的 cpptest.o 文件(二进制对象文件,但不可执行)。

      编译和链接我然后使用(如 Alejandro 所示):

      > g++ cpptest.cpp -o cpptest.exe
      

      或者分两步:

      > g++ -c cpptest.cpp -o cpptest.o
      > g++ cpptest.o -o cpptest.exe
      

      这些创建了实际的可执行文件。

      【讨论】:

        猜你喜欢
        • 2013-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-03-23
        • 2020-08-28
        • 2016-02-23
        相关资源
        最近更新 更多