【问题标题】:C compiler confusionC 编译器混淆
【发布时间】:2017-03-27 19:13:19
【问题描述】:

好的,所以我在操作系统上,我使用终端来编译我的 c 代码。每当我使用 nano 或 vim 创建一个名为“tst.c”(或任何名称)的文件时,我都会使用(我的老师告诉我每次都使用它,所以我不认为这是问题所在:

gcc -Wall -std=c99 -o tst.c ./tst.c

然后我猜它变成了二进制。但是当我再次尝试编辑它时,我猜它有所有这些奇怪的加密:

��������H���__PAGEZERO��������������������������������������������������������ÿ��__TEXT����������������������������������������������������__text����������__TEXT����������`�����*�������`���������������Ä������������__stubs���������__TEXT����������ä������������ä��������������Ä�����������__stub_helper���__TEXT����������ê������������ê���������������Ä������������__cstring�������

所以,问题是,我如何恢复以便可以编辑而不是每次都创建新文件???????

【问题讨论】:

  • -o tot.c 使其成为输出文件。请改用-o blah。始终阅读您正在使用的工具的文档。特别是当它们没有按您预期的那样工作时。如果这真的是你的老师告诉你的,那么告诉他他的建议已经删除了你的工作并且你没有提交它:P
  • 不要叫它 *.c gcc -o DESTINATIONFILE SOURCEFILE gcc -o tot tot.c 然后打开 ./tot 你基本上用它编译的二进制文件覆盖了你的源代码你需要重写该代码以使用我的说明再次编译它

标签: c gcc compilation


【解决方案1】:

由于-o 选项,您正在使用已编译的可执行文件覆盖原始源文件:

gcc -Wall -std=c99 -o tst.c ./tst.c
                   ^^^^^^^^ 

您需要在 -o 选项中指定不同的输出文件名:

gcc -Wall -std=c99 -o tst tst.c

否则,您可以完全关闭-o 选项,编译后的可执行文件将写入名为a.out 的文件。

最终,您将希望使用make 实用程序自动执行所有这些操作,但现在只需了解-o 选项的工作原理。

【讨论】:

    【解决方案2】:

    -o (name) 标志意味着您将输出存储到您用于名称的任何内容中。所以如果您将 .c 添加到名称的末尾,您会看到很多有趣的东西。在了解每个标志的作用时,手册页非常棒。

    【讨论】:

      猜你喜欢
      • 2017-12-07
      • 1970-01-01
      • 2015-11-22
      • 1970-01-01
      • 1970-01-01
      • 2012-08-18
      • 1970-01-01
      • 2012-09-25
      • 1970-01-01
      相关资源
      最近更新 更多