mac的C编译器?

gon*_*one 3 macos gcc llvm cc

我正在处理有关链接的文本,并希望与所述文本中的一些示例一起工作。

为了更好地理解调用gcc驱动程序时发生了什么,我正在考虑手工完成所有的老式编译;

  • 预处理使用 cpp
  • 编译 cc1
  • 组装 as
  • 链接使用 ld

不幸的是,在我的 Mac 上,我似乎无法cc1直接引用(没有列出cc1in man)。我有哪些选择?

Bas*_*tch 6

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

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

cc1程序不会在你坐下PATH/usr/bin/但-on我的系统-中/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),将产生一个库或可执行文件。

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

链接参考

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

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