Большинство lib
файлов имеют оглавление.Компоновщик ищет эту таблицу, когда ищет символ.Если символ не найден, он переходит к следующей библиотеке и так далее, пока не будут найдены все библиотеки.
Некоторые компоновщики могут решить создать оглавление из всех библиотек.Эта таблица будет содержать имя символа и библиотеку, с которой он связан.Это ускоряет поиск символов.
Порядок поиска зависит от производителя компоновщика.Для этого нет ни стандартов, ни требований.Линкер может осуществлять поиск по первым пришел, первым обслужен , как указано в командной строке; последняя указанная библиотека или другой метод.Проверьте документацию для критериев.
Также поищите в сети name mangling
.Это метод, который компиляторы используют для разрешения конфликтов имен символов.
Наконец, компоновщики могут включать все функции в библиотеке, даже если используется только одна.Некоторые компоновщики включают только код для функции.Зависит от производителя линкера.Например, включает ли компоновщик всю библиотеку ввода-вывода при разрешении puts
или он просто включает необходимые функции?Включение всей библиотеки ускоряет время сборки, но делает исполняемый файл огромным.Включение только необходимого кода замедляет процесс сборки, но уменьшает размер исполняемого файла.
В общем, фаза связывания является одной из самых быстрых частей процесса перевода.Если вас беспокоит время сборки, начните сборку в конце дня или отправляйтесь на прогулку после начала сборки.; -)