官术网_书友最值得收藏!

Summary

In this chapter, we covered the fundamental steps and components required to build a C project. Without knowing how to build a project, it is pointless to just write code. In this chapter:

  • We went through the C compilation pipeline and its various steps. We discussed each step and described the inputs and the outputs.
  • We defined the term platform and how different assemblers can lead to different machine-level instructions for the same C program.
  • We continued to discuss each step and the component driving that step in a greater detail.
  • As part of the compiler component, we explained what the compiler frontends and backends are, and how GCC and LLVM use this separation to support many languages.
  • As part of our discussion regarding the assembler component, we saw that object files are platform-dependent, and they should have an exact file format.
  • As part of the linker component, we discussed what a linker does and how it uses symbols to find the missing definitions in order to put them together and form the final product. We also explained various possible products of a C project. We explained why relocatable (or intermediate) object files should not be considered as products.
  • We demonstrated how the linker can be fooled when a symbol is provided with a wrong definition. We showed this in example 2.5.
  • We explained the C++ name mangling feature and how problems like what we saw in example 2.5 can be prevented because of that.

We will continue our discussion regarding object files and their internal structure in the next chapter, Object Files.

主站蜘蛛池模板: 旺苍县| 合江县| 莱州市| 湘乡市| 抚州市| 新疆| 铜陵市| 连山| 菏泽市| 特克斯县| 泽库县| 盘山县| 嘉黎县| 卢氏县| 勐海县| 湘西| 南京市| 同仁县| 华宁县| 潜山县| 昭平县| 台中市| 怀柔区| 濮阳县| 湘阴县| 大悟县| 泸定县| 小金县| 凤凰县| 道孚县| 嘉荫县| 会昌县| 池州市| 桂阳县| 万州区| 璧山县| 瑞金市| 宣威市| 东山县| 尚志市| 嘉峪关市|