Как происходит сборка проекта на с++. Имеем нескольких cpp и h файлов: a.h, a.cpp , b.h, b.cpp и еще сколь угодно много таких файлов.

Сначала h файлы подставляются в соответствующие cpp файлы (то есть , в которых есть include этих h файлов).
Далее каждый cpp файл компилируется отдельно и получается соответствующий obj файл.
obj файл это файл типа таблицы разбитый на несколько частей.
В части internal попадает все, что объявлено static.
В части external попадает все остальное, а именно определения функции, переменные. Они могут быть определены (реализованы) в данном obj (их тип будет defined), а могут быть только объявлены (undefined).