静态运行库中一个目标文件只包含一个函数

静态运行库中一个目标文件只包含一个函数

Content #

为什么静态运行库里面一个目标文件只包含一个函数?比如libc.a里面printf.o 只有printf()函数、strlen.o只有strlen()函数,为什么要这样组织?

链接器在链接静态库的时候是以目标文件为单位的。比如我们引用了静态库中的 printf()函数,那么链接器就会把库中包含printf()函数的那个目标文件链接进来,如果很多函数都放在一个目标文件中,很可能很多没用的函数都被一起链接进了输出结果中。由于运行库有成百上千个函数,数量非常庞大,每个函数独立地放在一个目标文件中可以尽量减少空间的浪费,那些没有被用到的目标文件(函数)就不要链接到最终的输出文件中。

From #

程序员的自我修养