Der Linker hat mit Headerdateien überhaupt gar nichts am Hut.
Der Inhalt von Headerdateien wird auch gar nichts "ins Programm
geschrieben".
Wenn Du allerdings den Fehler begehst, in Headerdateien Dinge nicht nur
zu deklarieren, sondern auch zu definieren, dann wird der Linker sich
über doppelt definierte Symbole beschweren.
Dir ist nicht klar, was ich mit der Unterscheidung zwischen Deklaration
und Definition meine?
Nehmen wir mal eine globale Variable:
1 | int meineGlobaleVariable;
|
ist die Definition der Variablen. So etwas darf im gesamten Programm
genau einmal auftauchen, und hat daher in einer Headerdatei nichts
verloren.
So etwas gehört in eine Source-Datei (*.c).
1 | extern int meineGlobaleVariable;
|
Das ist eine Deklaration einer anderswo definierten Variablen. Das kann
in einer von zig Source-Dateien eingebundenen Headerdatei stehen, ohne
daß es zu Problemen führt.
Damit das Programm erfolgreich gelinkt werden kann, muss allerdings
genau eine Definition im Programm vorhanden sein.