Ohja, das ist nicht so ganz einfach zu erklären, aber ich werds mal versuchen.
Ein .obj File erhälst du wenn du eine .c oder .cpp Datei compilierst. Anfangen kannst du damit eigentlich gar nichts.
Die entscheidende Sache macht noch der Linker, der dir aus deinem oder deinen mehreren .obj’s einen ausführbaren Code in Form einer .exe oder .dll linkt.
Eine .lib ist eine Bibliothek von einem Fremdanbieter, die du zu deinem Programm dazulinken kannst, statisch (wird mit in die .exe / .dll reingepackt) oder dynamisch wofür dann noch eine .dll dabei sein sollte.
Header-Files enthalten Klassen / Funktionsdeklarationen / Konstanten usw. So ist es z.b. für dich nicht relevant, wie eine Bibliothek die eine oder andere Funktion implementiert (und der Autor wird es dir auch nicht gerne zeigen), aber du und dein Compiler müssen wissen wie die Funktion aufzurufen ist und das steht im zur .lib mitgelieferten Header-File drin.
Ich weiss jetzt nicht so genau worum es dir geht. Bei MS VC++ gibt es was mit „vorcompilierten Headers“, das schalte ich aber immer ab. Dann ist die Frage ob dein Compiler so schlau ist und nicht jedesmal alles neu compiliert, sondern nur das was sich geändert hat. Und dann gibts noch inkrementelle Linker, die auch nicht jedesmal alles neu machen…
Ich hoffe ich hab ein wenig Klarheit reingebracht
MfG Bruno