2009-05-20 5 views

Antwort

6

Ich denke, es ist sehr einfach stuf enthält (crt steht für Zeit C run) wie argv und argc für Ihre Hauptfunktion der Einrichtung etc ... Hier ist ein link mit einer Erklärung ist

Wenn Sie nicht möchten, Da Sie zum Beispiel einen winzigen Bootloader schreiben, ohne ein bisschen libc, können Sie mit den Optionen --no-stdlib Ihr Programm verknüpfen. Wenn Sie diesen Weg gehen, müssen Sie auch Ihr eigenes Linker-Skript schreiben.

+0

WARNUNG: -nostdlib Option in GCC 4.1.2 – psihodelia

+0

@shodanex, Druckfehler 'stuf' –

1

Objektdateien enthalten Ihren kompilierten Code, sind aber nicht selbst ausführbar. Es ist die Aufgabe des Linkers, alle Objektdateien, aus denen ein Programm besteht, zu einem Ganzen zusammenzufügen. Dies beinhaltet das Auflösen von Verweisen zwischen Objektdateien (extern Symbole), das Überprüfen, ob es einen main() Einstiegspunkt (für C-Programme) gibt, und so weiter.

Da jede Quelldatei (.c oder .cpp) in eine separate Objektdatei kompiliert wird, die dann vom Linker gelesen wird, werden Änderungen an einer einzigen C-Datei nur neu kompiliert, wodurch eine neue Objektdatei generiert wird , die dann mit den vorhandenen Objektdateien zu einer neuen ausführbaren Datei verknüpft wird. Dies beschleunigt die Entwicklung.

UPDATE: Wie in einer anderen Antwort erwähnt, die "crt.o" Objektdateien enthält die C r un t ime-Code, der von den meisten C-Programme werden benötigt angenommen wird. Sie können die lesen und die --no-stdlib Option finden, dies wird GCC sagen, dass Ihr bestimmtes Programm nicht mit den Standard-C-Runtime-Dateien verknüpft werden sollte.

1

Ich bin nicht sicher, Ihre Frage zu verstehen, aber ich denke, Sie beziehen sich auf "crt1.o" im GCC-Paket.

Die CRT ist eine der Basis-Pakete der libc, die grundlegende Funktionalität für den Zugriff auf den Computer bietet. IIRC es enthält Methoden wie 'printf' und so.

Deshalb ist es oft sogar in den grundlegendsten C-Anwendungen enthalten.

+1

crt0.o enthält printf nicht. printf befindet sich in der Regel in libc.a –