По причине я хочу распаковать статический lib (libx.a) в файлы отдельного объекта (a.o b.o c.o) и указать эти объектные файлы (a.o b.o c.o) во входном списке компоновщика вместо libx.a, с другими опциями компоновщика, остающимися тем же.
Однако я заметил, что вышеупомянутое изменение привело к некоторому различию в выходном исполняемом файле. В основном (a.o b.o c.o) метод приведет к большему выходному размеру.
Таким образом, каково различие между этими двумя методами (libx.a и файлы отдельного объекта)? И существует ли способ работать вокруг?
GNU binutil (для и площадь ld) версия, которую я использую, 2.16.1
Спасибо.
Ld удаляет неиспользуемые части связанных архивов .lib (например, переменные с глобальной связью). Эта оптимизация не может иметь место, когда объектные файлы передаются напрямую, так как компоновщик не может определить, нужен ли какой-либо элемент файла .o, на который нет ссылки, какой-то неизвестной части позже (например, потому что он будет внешне видимым для списка экспорта модуля) или можно удалить полностью. Когда .lib вставляется в процесс связывания, компоновщик точно знает, что он может отбросить ненужные элементы.