Всякий раз, когда вы статически связываете исполняемый файл, компоновщик может продолжить и разрешить все имена символов (то есть сопоставить их с адресом), поскольку все символы, которые он будет знать о вас, предоставили компоновщику сейчас (в виде .o
файлов и .a
библиотек, которые на самом деле являются просто набором .o
файлов).Если есть имена, которых там нет, вы получите ошибку связи (это отличается от динамического связывания, когда вы можете загрузить другую библиотеку во время выполнения).В вашем случае у вас есть дополнительные символы, на которые не ссылается исполняемый файл.Поскольку эти символы известны компоновщику как неиспользуемые, они просто удаляются из исполняемого вывода.Таким образом, ваш исполняемый файл в этом случае будет меньше входных библиотек.