用于mac的C编译器?

时间:2013-05-22 14:35:01

标签: macos gcc llvm cc

我正在处理关于链接的文本,并希望在所述文本中使用一些示例。

为了更好地了解当我调用gcc驱动程序时发生的事情,我正在考虑手工编写所有编译旧学校;

  • 使用cpp
  • 进行预处理
  • 使用cc1
  • 进行编译
  • as
  • 组装
  • 使用ld
  • 进行关联

不幸的是,在我的Mac上,我似乎无法直接引用cc1cc1中没有man列表。我有什么选择?

2 个答案:

答案 0 :(得分:4)

阅读有关GCC内部的一些材料。首先是GCC上的wikipage。然后,您可以使用MELT probe(您可能希望Linux系统使用它)。 然后阅读GCC manual。和GCC resource center

使用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 debugging options

预处理现在在cc1内。

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

MELT site包含一些文档,以及一些解释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启动)正在将其转换为.old链接器(由gcc启动)将生成库或可执行文件。

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

关于链接的参考

关于链接的好书是Levine's Linkers & loaders本书。

答案 1 :(得分: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 所在的位置。