Деталь от разборки, нет особого интереса к двоичным файлам.
Что касается связи между файлами * .h и двоичными файлами, вам следует обратиться к старому любимому проходу между C-> obj's-> exe.
В традиционном программировании каждый * .C / * Cpp (и какао * m тоже) генерирует obj, двоичное представление istructions. Таким образом, каждый * C имеет свой собственный файл * .h.
Когда вы не хотите предоставлять источники клиенту, вы предоставляете только .obj (библиотека - это вариант obj ...) и * .h, чтобы другие программисты могли вызывать ваши функции.
Для этого нужен файл * h? строго НЕТ: программист может вызвать функцию, чей прото неизвестен: компоновщик разрешит ее. но:
1) компилятор предупредит у вас нет прото функции, которую вы вызываете
2) компилятор не может проверить синтаксис и тип параметров.