链接静态库与单个目标文件

use*_*031 10 linker static

出于某种原因,我想将静态库(libx.a)解压缩到单个目标文件(ao bo co)中,并在链接器输入列表而不是libx.a中指定这些目标文件(ao bo co),以及其他链接器选项保持不变.

但是,我注意到上面的更改导致输出可执行文件有很大差异.基本上,(ao bo co)方法将导致更大的输出大小.

那么两种方法(libx.a和单个目标文件)之间的区别是什么?有办法解决吗?

我正在使用的GNU binutil(for和ar ld)版本是2.16.1

谢谢.

Rud*_*udi 10

Ld删除链接的.lib存档的未使用部分(如具有全局链接的变量).直接传递目标文件时不能进行此优化,因为链接器无法确定稍后某个未知部分是否需要.o文件的某些未引用元素(例如,因为它将由模块导出列表外部可见)或可以完全删除.当在链接过程中放置​​.lib时,链接器确定它可以丢弃不必要的元素.