Was macht die obj-Datei ctr1.o in gcc compilier? Warum verknüpft der Linker diese obj-Datei immer, wenn eine ausführbare Datei generiert wird?Was macht die Objektcodedatei ctr1.o im gcc-Compiler?
Antwort
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.
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.
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.
crt0.o enthält printf nicht. printf befindet sich in der Regel in libc.a –
- 1. Was macht die -i-Flagge im Andockfenster?
- 2. Was macht% im folgenden Code?
- 3. Was macht Slash (/) im Prolog?
- 4. Was macht "-Wall" in "g ++ -Wall test.cpp -o test"?
- 5. Was ist die Verwendung von Mcrt1.o und Scrt1.o?
- 6. Was macht die SQLite3-batch CLI-Option?
- 7. Was macht die 'rows' Spezifikation im Schnitt (tableA, tableB, 'rows')
- 8. Was macht Express.js im MEAN-Stack?
- 9. Was macht NOPL im x86-System?
- 10. C# Was macht der == Operator im Detail?
- 11. Was macht Mandrill mit Anhängen im Testmodus?
- 12. Was macht Kontext-Annotation im Frühling?
- 13. Was macht * zoom: 1 im Bootstrap?
- 14. Was macht die registerNatives() Methode?
- 15. Was macht die vorfieldinit Flagge?
- 16. Was macht die Autoloads-Umgebung?
- 17. Was macht die Funktion invisible()?
- 18. Was macht die Funktion tf.nn.embedding_lookup?
- 19. Mockito - was macht die Verifikationsmethode?
- 20. Was macht die Cmpq-Anweisung?
- 21. Was genau macht die Datenbanknormalisierung?
- 22. Was macht die LEAL-Montageanleitung?
- 23. Was macht die Bindung langsam?
- 24. ListBox.FindString Was ist die Worst-Case-Laufzeit? O (n), O (n log n), O (1) & rarr;
- 25. compareTo Java - Was macht das?
- 26. Was bedeutet "O (1) Zugriffszeit"?
- 27. Was macht die bodyParser() in connect Middleware?
- 28. Was macht die Montageanweisung 'db' eigentlich?
- 29. Was macht die Änderung der config.assets.version-Nummer?
- 30. SonarLint: Was macht die SonarQube-Projektoption?
WARNUNG: -nostdlib Option in GCC 4.1.2 – psihodelia
@shodanex, Druckfehler 'stuf' –