【问题标题】:gcc doesn't create a binary filegcc 不创建二进制文件
【发布时间】:2020-08-03 21:57:09
【问题描述】:

我正在尝试使用简单的 Windows API。

但是当我使用“MessageBoxA”时,我的代码不会创建二进制文件。而且它不会产生任何错误信息。

如果我不使用“MessageBoxA”,代码会创建二进制文件。

我在 Windows 10 上使用 gcc 版本 6.3.0。这是我的代码。

#include <stdio.h>
#include <windows.h>

int main() {
    printf("hello\n");

    MessageBoxA( 0, "hello", "aa", 0); // If I subtract this line, it works fine.

    return 0;
}

+) 如果当前目录中存在xxx.exe 文件并且我命令以下命令,该命令将删除xxx.exe 文件。

gcc myfile.c -o xxx.exe
  • 2020-04-27) 我附上了一个截图来显示我的编译结果。

【问题讨论】:

  • 如果你没有得到二进制文件,那么编译器必须输出某种错误信息,你也应该在你的问题中包含这些信息。
  • 当您尝试链接您的程序时,您是否收到任何关于 MessageBoxA 丢失的消息?如果是这样,那么您需要链接到提供它的库。
  • 你如何编译你的程序?您必须链接到 user32,可能是 -luser32 和 gcc。
  • 如果您在 VS Code 或其他以 UTF-16 格式保存的编辑器中进行编辑,gcc 将无法读取它。 (确保您保存为 UTF-8 或 ASCII)
  • 如果你真的没有收到错误信息,那还有输出吗?如果您故意引入语法错误(例如删除 printf 之后的分号或类似的东西),您会收到错误消息吗?

标签: c windows gcc


【解决方案1】:

据我所知,这个问题的解决方法如下:

  • 在使用 MinGW 时使用 -std=c11 选项。
  • 使用其他工具,例如 MinGW W64。

感谢@FelixG、@TomKarzes、@MOehm、@DavidC.Rankin、@hanshenrik

【讨论】:

    猜你喜欢
    • 2017-12-24
    • 2014-11-13
    • 2021-05-02
    • 2015-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 2017-11-11
    相关资源
    最近更新 更多