Похоже, у вас есть несколько фундаментальных недоразумений относительно скомпилированного исполняемого кода. Следующее относится к встроенным и настольным системам.
Заголовочные файлы - не более чем исходные файлы, как и любые другие. Разница в том, что они вставляются в модуль компиляции препроцессором, а не компилируются напрямую. Также в большинстве случаев они содержат только декларативные операторы и обычно не вносят вклад в сгенерированный код в смысле исполняемых инструкций или хранимых данных.
Во время выполнения ни один вашего исходного кода не должен существовать на цели; работа компилятора заключается в создании собственного исполняемого машинного кода из вашего исходного кода. Именно этот машинный код хранится и выполняется на цели.
Заголовочный файл - это не то же самое, что библиотека . Это просто (как правило) объявление содержимого библиотеки (прототипы функций и другие объявления символов, такие как константы, данные, макросы, перечисления). Библиотека принимает форму предварительно скомпилированного / собранного объектного кода, хранящегося в объединенном архиве. Работа компоновщика состоит в том, чтобы объединить необходимый библиотечный код с объектным кодом, сгенерированным из компиляции вашего собственного источника. Именно этот связанный исполняемый файл хранится и выполняется на целевом объекте, а не в исходном коде.
Исключением для заголовочных файлов, содержащих только декларативный код, является случай, когда они содержат встроенный код или исполняемый код в макросе. Однако такой код занимает место в вашем приложении, только если он явно вызван приложением.
Когда код библиотеки связан, связаны только те компоненты кода объекта библиотеки, которые необходимы для разрешения ссылок в коде приложения, а не вся библиотека (если только вся библиотека не состоит только из одного объектного файла).