... как именно работает компоновщик.
a) ... связывает ли компоновщик только с библиотеками, на функции которых есть ссылки в исполняемом файле?
b). .. Библиотека stati c имеет несколько объектных файлов, и только один используется исполняемым файлом, она связана только с этим объектным файлом?
Это зависит ... от Linux есть два вида библиотек ... ".so" и .a (архив).
пример:
/usr/lib/x86_64-linux-gnu/libgmpxx.a
/usr/lib/x86_64-linux-gnu/libgmpxx.so
Если вы укажете .a в части ссылки вашей команды сборки, будут связаны только содержащиеся объектные файлы, на которые ссылается ваше приложение (а не вся библиотека). Этот исполняемый файл является «автономным», и каждая запущенная копия имеет свою собственную копию любых функций, которые он использует.
Если вы укажете .so в части ссылки вашей команды сборки, и ваше приложение будет первым Чтобы использовать определенную библиотеку ".so", я считаю, что ваше приложение будет на короткое время приостановлено во время запуска, пока загружается ВСЕ библиотека ".so".
Если вы укажете .so в части ссылки вашей команды сборки, и ваше приложение не первым использует этот конкретный .so, тогда загрузчик добавит в ваше приложение сопоставление с уже загруженным - '. so' в системной памяти. (гораздо более быстрое соединение)
Исполняемый файл, использующий .so, полагается на то, что система загрузит библиотеки .so в память, а также отобразит библиотеку в памяти приложения и завершит ссылки приложения на необходимые функции.
Я считаю, что ваша 'stati c библиотека' соответствует использованию библиотеки ".a" (архив).
a) да - компоновщик (иногда линковщик-загрузчик ) 'завершается', когда больше нет неразрешенных ссылок (на объекты или функции).
б) да - см. а)