【问题标题】:.exe file is not being created in windows for C by cmd by gcc compiler.exe 文件不是由 gcc 编译器通过 cmd 在 Windows 中为 C 创建的
【发布时间】:2015-01-20 06:04:49
【问题描述】:

我也很担心如何让你们了解我的问题并分享我的经验。我在学习C。在以前,我使用Code-blocks IDE来编译和运行C代码。我了解到作为初学者最好使用cmd来编译和运行代码而不是IDE。我使用的是windows 8。在我不习惯使用cmd之前,我还了解到要成为一名高级用户和优秀的程序员,我应该非常了解cmd的使用。 设置环境变量后开始通过cmd通过以下命令编译c代码

gcc -o "可执行文件名" "C源代码文件名"

它会创建一个 .exe 文件。但没有 .o 文件。当我使用 IDE 时,还发现了一个带有 .exe 的 .o 文件

  1. 可能的原因是什么?

编译代码后,我通过调用“可执行文件名”来运行它。 当检查目录时,发现了一个 .exe 文件。 但现在的问题是,最近在编译运行代码,发现没有创建.exe文件,而是创建了一个未知扩展名的文件“POINTERWHILE File (.pointerWhile)”(已复制从文件属性)。这个未知的扩展文件仅由 cmd 运行。它可能是我的源代码文件名的一部分。下面给出了代码和源代码的名称。

源代码名称:Example184.1.pointerWhile

#include<stdio.h>
main()
 {
  char *p = "stop";
  char str[80];
   do
    {
     printf("Enter a String: ");
     gets(str);
    }
  while(strcmp(p,str));
 }

此程序将接受输入,直到输入“停止”为止。

这种情况发生在其他几个文件中。然后我将它们复制到另一个文件夹并编译并运行,但结果相同。

我通过代码块从同一个文件夹和其他文件夹编译并运行相同的代码,结果是一样的。该文件仅在 IDE 中运行。

然后在同一目录和其他目录中创建另一个名称不同的文件,但代码相同。然后它正在创建 .exe 文件。

2.产生.exe文件的原因可能是什么?

【问题讨论】:

  • 尝试提出更小、更简单的问题。我几乎不知道你想问什么。
  • 如果你给 GCC 一些.c 文件,它将编译它们并将它们链接到一个可执行文件中,并且不会保存任何中间的.o 文件。如果你想要这种行为,你需要将-c 传递给 GCC,告诉它只编译,而不是链接。
  • 那么如何从.o文件制作.exe文件呢?唯一的.o文件有什么用@JonathonReinhart
  • 堆栈溢出并不意味着教授编译过程的每一个细节。你需要找到一本好书、资源或导师。 en.wikipedia.org/wiki/Object_file

标签: c windows gcc cmd


【解决方案1】:

您在学习 cmd 和 C 方面付出了巨大的努力!

但是,我认为您混淆了文件的扩展名(名称)及其内容。当你告诉 gcc 生成一个可执行文件时,你可能想给它一个 .exe 扩展名,就像你说的那样,假设你的源文件名为“myprog.c”:

gcc -o myprog.exe myprog.c

这应该总是生成一个 myprog.exe 文件。但是没有什么能阻止你这样称呼它: gcc -o myprog.myFancyExtension myprog.c

你应该仍然可以通过 cmd 运行程序(虽然我没有在 windows 上测试过)。请注意,在其他系统上,例如 Linux,可执行文件通常根本没有扩展名。

另外,您正在谈论您的 IDE 如何生成 myprog.o 目标文件以及 myprog.exe 可执行文件。为此,您的 IDE 将调用编译器 (gcc) 两次:一次生成 .o 文件,另一次生成 .exe 文件。无法在一次编译器运行中生成这两个文件。学习 cmd 的好处是你会在不告诉你的情况下了解你的 IDE 实际为你做了什么。缺点是你必须实际学习它;)

通常,人们不喜欢手动使用 gcc,因为随着项目的增长,他们将使用不同的文件,并且手动重新编译它们变得乏味。为了克服这个问题,您将需要使用构建工具,例如 Make。我不熟悉Windows下的开发,所以我不能推荐任何具体的工具。这些工具的重点在于,当您的项目有多个源文件时,您只需调用构建器一次,例如 Make:

make

而不是手动调用:

gcc -c myFeature1.c
gcc -c myOtherFeature.c
gcc -c myYetAnotherFeature.c
gcc -c myMain.c
gcc -o myMain.exe MyMain.o myFeature1.o myOtherFeature.o myYetAnotherFeature.o

希望对你有帮助

【讨论】:

  • 我从 Linux 得到的使用 cmd 工作的动机。我试图学习 Linux,但我发现了一些问题。我无法在没有互联网的情况下在 Linux 中安装软件意味着 Ubuntu 软件中心。我在互联网上搜索但无法理解它们并使用搜索结果。结果我完全依赖互联网。我试图在 Windows 旁边启动我的 PC Linux,但意外地这样做了,我的所有硬盘驱动器都被格式化了,我丢失了我的数据。虽然不知何故我已经恢复了所有这些。然后我想我应该使用我手中所有准备好的资源意味着windows cmd。
  • 如果你有任何作为初学者学习 Linux 的资源,请不要忘记分享。 @KrahnacK
  • 是的,现在人们最有可能使用 Internet 在 Linux、Windows 和 OSX 中安装软件(而不是 CD 或其他来源)。在我看来,Ubuntu 在用户友好方面做了很多努力,所以我向初学者推荐它。如果您有任何问题,您可以随时在 Ubuntu 论坛或 askubuntu.com 上发帖。这是一个可能有用的链接:quora.com/Where-can-I-find-resources-to-get-help-with-Linux
猜你喜欢
  • 2012-08-10
  • 1970-01-01
  • 1970-01-01
  • 2015-08-06
  • 2020-10-11
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多