3

I'm working through a text on linking, and wanted to work along with some examples in said text.

To better understand whats going on when I invoke the gcc driver, I was looking into doing all the compilation old-school by hand;

  • preprocessing using cpp
  • compiling with cc1
  • assembling with as
  • linking using ld

Unfortunately, on my Mac I don't seem to be able to reference cc1directly (no listing of cc1 in man). What are my options?

4

2 回答 2

6

阅读一些关于 GCC 内部的材料。首先是GCC上的维基页面。然后,您可以使用MELT 探针(您可能希望 Linux 系统使用它)。然后阅读GCC 手册。和GCC 资源中心

用于gcc -v -Wall编译,它将显示cc1正在运行的内容(并且-Wall总是有用的)。所以尝试编译gcc -v -Wall hello.c -o helloworld.bin

cc1程序不在您的PATH或在我的系统中,/usr/bin/而是在我的系统中/usr/lib/gcc/x86_64-linux-gnu/4.8/cc1

该命令gcc -print-prog-name=cc1将告诉您cc1的. 有关更多信息,请参阅GCC 调试选项 gcc

预处理现在在里面cc1

gcc程序只是一个驱动程序,开始cc1(它完成大部分编译工作),然后asld等等......

MELT 站点包含一些文档,以及一些解释 GCC 的幻灯片,您可能会发现它们很有趣。MELT 是一种扩展 GCC 的领域特定语言。

另请参阅http://starynkevitch.net/Basile/gcc-melt/cc1-internals.svg上的图片和下图

http://starynkevitch.net/Basile/gcc-melt/gcc-MELT-inside.png

图片来自http://starynkevitch.net/Basile/gcc-melt/gcc-MELT-inside.png,由我​​完成,CC BY SA

cc1正在生成.s汇编文件;as(由 开始)gcc正在将其转换为.o. ld链接器(由 开始)gcc将生成一个库或可执行文件。

PS。我有一个 Linux 系统,但在 MacOSX 上情况非常相似。

链接参考

一本关于链接的好书是Levine 的 Linkers & loaders book。

PS。MELT 在 2021 年过时,但我正在研究Bismon静态源代码分析器和RefPerSys(生成 C++ 代码)。

于 2013-05-22T14:40:53.077 回答
0

作为参考,我在我的 macOS (Catalina) 上安装了带有 brew 的 gcc-10。

虽然cc1不能直接访问(通过 PATH),但可以在

/usr/local/Cellar/gcc/10.2.0/libexec/gcc/x86_64-apple-darwin19/10.2.0

如果您迷路了,请尝试gcc -v从详细信息中找到您所在的cc1位置。

于 2021-01-10T07:30:34.997 回答