Меня всегда смущало, как работает компоновщик, и это сложный вопрос для поиска.
Чтобы продемонстрировать свой вопрос и дать основу для ответа, я изложу то, что знаю (или думаю, что знаю) до сих пор. Я могу быть очень не прав. :)
Во-первых, каждый файл .cpp встроен в промежуточный файл (я считаю, что .o для Posix / ELF и .obj для Win / PE). Этот промежуточный файл содержит все символы, определенные в .cpp, из которого он был создан, и содержит инструкции, для каких внешних ссылок он должен быть правильно разрешен. В качестве дополнения к этому системы Posix позволяют объединять файлы .o в файл .a (который, кажется, не делает ничего, кроме объединения? Какая команда это делает?). Является ли .lib Win / PE эквивалентом файла Posix .a?
Затем промежуточные файлы связаны друг с другом, внешние зависимости разрешены, и у вас есть исполняемый файл. Я пропускаю какие-либо шаги?
Спасибо!