【问题标题】:What are the temporary 'object' files (with alphanumeric file extensions) that are created during C compilation?在 C 编译期间创建的临时“对象”文件(带有字母数字文件扩展名)是什么?
【发布时间】:2018-06-17 07:18:52
【问题描述】:

当我编译我的 C 程序时,我会得到为每个目标文件临时创建的某些文件。这些临时文件的标题为utilities.o-fb62414b 等(即something.o-suffix,其中'something' 是我的目标文件,后缀是字母数字字符)。我在任何地方都找不到这些临时文件的描述。当我在编译完成后ls 时它们不存在,它们不仅仅是*.o 文件。如果我在编译时观看(或者在编译时从另一个终端执行ls),它们只会在窗口中短暂弹出。

我使用的编译选项是-Wall -fmessage-length=0 -pg -O3。 我也在使用gsl 库。我在 Macbook Pro (10.12.6) 上使用 gcc 进行编译和链接。

关于这些临时文件是什么的任何帮助?

【问题讨论】:

  • 我只是注意到,这些文件与使用 -save-temps=obj(创建 .bc.i.s 文件)时输出的文件不同。
  • c object file 可以轻松搜索更多信息。建议的副本应该回答您的问题。除非您想具体了解它们暂时出现的原因,并且在编译后被清除。也就是说,您的问题是关于目标文件,还是关于它们是临时的?
  • 谢谢大家。我应该更清楚 - 我的问题是关于这些文件是临时的。它们只是目标文件的副本吗?为什么它们需要是临时的?
  • C 对象文件以*.o 结尾,我正在谈论的文件以.o-fb62414b 结尾(或其他一些字母数字后缀)。所以我对这些其他文件很感兴趣。
  • 在命令行中添加-v可能有助于理解。

标签: c gcc compilation object-files


【解决方案1】:

当你像这样编译和链接一个程序时:

gcc -o hellow hello_world.c

您正在使用 GCC 有助于将其扩展为必要的编译的简写 步骤和链接步骤,就好像你已经完成了:

gcc -c -o hello_world.o hello_world.c   # compile
gcc -o hellow hello_world.o     # link
rm hello_world.o      # Delete the intermediate object file

但是由于速记没有为中间对象指定任何名称 编译步骤中的文件(如-o hello_world.o),GCC会生成一个临时文件 写入目标文件的文件名。这就是你所看到的。

在 Mac OS 上,gcc 默认是clang 的别名。铛 在这方面表现得像真正的 GCC(虽然临时文件名 它生成符合与真实 GCC 不同的模板)。事实 他们在你的 MacBook 上没有 .o 扩展并不重要:一个对象 file 是一个目标文件,无论扩展名如何,链接器都会识别 就是这样。

【讨论】:

    猜你喜欢
    • 2014-05-07
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 2012-02-16
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多