c - 在 C 编译期间创建的临时 'object' 文件(带有字母数字文件扩展名)是什么?

标签 c gcc compilation object-files

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

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

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

最佳答案

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

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 扩展名并不重要:一个对象 无论扩展名如何,文件都是目标文件,链接器将识别

关于c - 在 C 编译期间创建的临时 'object' 文件(带有字母数字文件扩展名)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48148142/

相关文章:

gcc - 如何使用 binutils 链接器处理静态库之间的递归依赖关系?

c++ - 如何在单独的 Linux 和 Windows 计算机上使用代码块开发 C++ 项目?

c++ - vcpkg 是发布开源和跨平台 C++ 库的宝贵选择吗

c# - 命令行 MSBuild 无法编译代码

python - 为什么cython不编译逻辑或者到 `||`表达式?

c - 读取文件并将输入转换为两个数组

C Guard 不能按预期与 rlutil.h 一起工作

c - 从c中的函数返回指针

c - SDL2 - 尝试将表面信息复制到结构时发生崩溃。没有给出错误信息

c - 优化 "extern const int"上的除法