Да: чтобы объединить несколько объектных файлов в один, используйте ld -r
или ld -Ur
:
Из "man ld" в Linux:
-r
--relocatable
Generate relocatable output---i.e., generate an output file that can
in turn serve as input to ld. This is often called partial linking.
As a side effect, in environments that support standard Unix magic
numbers, this option also sets the output file’s magic number to
"OMAGIC".
If this option is not specified, an absolute file is produced.
When linking C++ programs, this option will not resolve references to
constructors; to do that, use -Ur.
Вы также можете сделать это с помощью gcc:
gcc -Wl,-r foo.o bar.o -o foobar.o -nostdlib
Подобное объединение объектных файлов имеет некоторые преимущества перед использованием архивной библиотеки: если объединенные файлы изменяются очень редко (по сравнению, скажем, с main.c), ваши окончательные исполняемые ссылки будут быстрее.
OTOH, с заархивированной библиотекой компоновщик будет использовать только то, что ему нужно, поэтому ваш исполняемый файл может оказаться меньше, если, например, В конечном итоге, window2.c не требуется.