我想将静态库(libx.a)解压缩到单个目标文件(ao bo co)中,并在链接器输入列表而不是libx.a中指定这些目标文件(ao bo co),其他链接器选项保持不变。
但是,我注意到上述更改导致输出可执行文件存在很大差异。基本上,(a.o b.o c.o)方法将导致更大的输出尺寸。
那么两种方法(libx.a和单个目标文件)之间有什么区别? 有办法解决吗?
我正在使用的GNU binutil(for和ar ld)版本是2.16.1
感谢。
答案 0 :(得分:10)
Ld删除链接的.lib档案的未使用部分(如具有全局链接的变量)。直接传递目标文件时不能进行此优化,因为链接器无法确定稍后某个未知部分是否需要.o文件的某些未引用元素(例如,因为它将由模块导出列表外部可见)或可以完全删除。当.lib在链接过程中就位时,链接器确定它可以丢弃不必要的元素。