【问题标题】:C compiler for mac?mac的C编译器?
【发布时间】:2013-05-17 16:07:48
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: macos gcc llvm cc


    【解决方案1】:

    阅读一些关于 GCC 内部的材料。首先是GCC 上的维基页面。然后,您可以使用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 将告诉您您的 gcc 使用了哪个cc1。请参阅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,由我完成,CC BY SA

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

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

    链接参考

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

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

    【讨论】:

      【解决方案2】:

      作为参考,我在我的 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 所在的位置。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-18
        • 2018-07-04
        • 2017-07-07
        • 2020-09-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多