阅读一些关于 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(它完成大部分编译工作),然后as,ld等等......
该MELT网站包含了一些文件,有些幻灯片解释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)被转化成.o。该ld接头(开始gcc),将产生一个库或可执行文件。
附注。我有一个 Linux 系统,但在 MacOSX 上情况非常相似。
一本关于链接的好书是Levine 的 Linkers & loader书。
附注。MELT 于 2021 年过时,但我正在研究Bismon静态源代码分析器和RefPerSys(生成 C++ 代码)。
| 归档时间: |
|
| 查看次数: |
1364 次 |
| 最近记录: |