本文讲讲编译链接的一些小常识!
编译最小单元
我们在开发过程中,需要把程序员写的源码,编译成机器可识别的机器码。这会经历编辑源代码->预处理->编译->链接的开发过程。
我们需要知道编译的最小单元是什么?很简单,一个源码会生成一个目标文件。因此,一个源文件就是一个编译最小单元。但是,这个源文件必须是:经过预处理过后的源文件,这很重要。
链接最小单元
编译完成以后,需要进行链接。
那么我们链接的最小单元是什么呢?答案是:通常情况下是一个目标文件。因此,只要我们用到了目标文件中的一个接口函数,那么该目标文件的所有内容最后都会放到可执行程序中去。这可能会让程序相对较大。
因此,我们可以在编译时加上参数:-ffunction-sections -fdata-sections
,以及O2二级优化,然后全部重新编译一遍。用于链接的最小单元是接口,而不是文件。然后在链接生成out文件的那里,加上链接参数--gc-sections
。目的是让生成的可执行文件尽可能小点。
但这样做,则必须得非常小心,且对源码非常熟悉,不然很可能会出现想使用的接口是未定义引用的情况。
出差必备
买火车票、高铁票、机票,订酒店都打9折的出行工具TRIP,点击注册