Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Linken mehrerer C-Dateien?
Ich hab jetzt versucht, die port_formard-Aufgabe so zu lösen, wie es gefordert ist, und 2 C-Dateien. Da mir nix besseres eingefallen ist, hab ich das Beispiel-Makefile aus D-Uebung2-A5.gz.ps (siehe SysProg-Webseite), Seite D.10, genommen und meine Dateien pfwd.c und forward.c eingetragen. Naja, nur funzt des irgendwie net. Ich bekomm tausende Fehler, dass irgendwas net gefunden wird:
In Windows C++ würde ich jetzt sagen, da fehlen gewaltig Bibliotheken, die mit gelinkt werden müssen. Die ld-Manpage sagt aber, dass die Standard-Pfade bereits durchsucht werden.
Was soll ich also machen? Ich krieg mein Programm so nicht kompiliert.
du kannst auch den gcc zum linken benutzen, der wenn object files kriegt, linkt er die auch gleich richtig
ich wusst gar net, dass es auch ein Compiler/Linker namens “Windows” gibt
vielen dank, funktioniert so. nur wozu braucht man dann den ld?
meinte microsoft visual c++
wer den ld braucht, wird schon wissen, wieso er ihn braucht… [tm]
Dann sollte ich mal den fragen, der das in unser Übungsskript reingetan hat…
Aehh, ich weiss auch nicht wie das in das Skript reingeraten ist -
das steht da schon immer so drin
Aber im Ernst - das ist wirklich nicht ganz korrekt so wie’s auf
Seite D.3 im Uebungsskript steht.
cc (bzw. gcc) ist letztlich ein Programm, das zuerst den C-Praeprozessor
(/usr/bin/cpp) aufruft, die Ausgabe dann compiliert
(bzw. wenn man ihm ein Fortran-File gibt ruft
er z.B. sogar den Fortran77-Compiler auf)
und am Ende fuer die ganzen .o-Files die
dabei entstehen den /usr/bin/ld aufruft.
Wenn man dem gcc gleich .o-Files uebergibt, laesst er natuerlich
die ganzen Schritte vorher dafuer weg.
Beim ld-Aufruf gibt der gcc immer noch die Option -lc
mit - d.h. es wird die Datei /usr/lib/libc.a mit eingebunden.
Und das ist genau der Unterschied zwischen einem einfachen
gcc-Aufruf mit .o-Files und eine ld-Aufruf.
Wuerde man also in dem Beispiel auf Seite D3
ld -o test test.o func.o -lc
schreiben, dann wuerde das auch funktionieren.