《gcc五分钟系列》第五节:稍微多说点目标文件

    上一节,我们讲到目标文件。那么目标文件究竟是什么?为什么通过目标文件能够实现多文件编程?
    说一下我个人的理解:
   
    第一步、编译器将源文件编译成目标文件。
        目标文件里面包含了很多内容(废话!)。和这节内容有关的有两个:1、目标文件提供的符号。2、目标文件需要的符号。
        请原谅我实在不知道如何翻译“reference”,“引用”似乎不能表达清楚,所以我擅自将它翻译成“符号”。
        符号包括:函数、变量、组合类型。
        组合类型包括:枚举类型、结构体、共同体、类等……
    第二步、链接器将目标文件链接成可执行文件。
        链接器会检查,每个目标文件需要的符号是否被某个目标文件提供。(这话好绕……)
        我简单解释一下。
        在上一节的例子中,
            main.o提供的符号是main()函数,需要的符号是sum()函数。
            sum.o提供的是sum()函数。
            将main.o和sum.o链接到一起,main.o需要的符号sum()函数就在sum.o里面被提供了。之后大家就都不需要什么了。所以链接成功。
        但是,需要特别指出的是,这个步骤实际上特别复杂,因为事实上还需要考虑动态链接的问题。我暂时不介绍动态链接,感兴趣的朋友可以自己去搜索相关资料。
       
    over