Kürzlich habe ich meine eigenen Bibliotheken (für die Verpackung) zu STATIC geändert. Jetzt erhalte ich Fehlermeldungen, dass eine in der Bibliothek definierte Variable mehrfach definiert ist. Es ist in Ordnung, die Bibliotheken benutzen sich gegenseitig. Aber warum wurde das vom Linker nicht bemerkt, bis ich zu STATIC wechselte? In einer meiner Dateien, setze ich die Variable als 'extern' deklariert und der Linker kennzeichnet es auch als 'mehrfach definiert'. Ist es o.k?Wie 'externe' Variablen in dynamisch verknüpften Bibliotheken gehandhabt werden?
Antwort
Grundsätzlich ist der Compiler hat 4 Stufen:
Vorbearbeitung: Makro und Symbolausgabe
Compilierung: Code generieren Zusammenbauen von dem
Zusammenbauen Prozessor ausgeführt werden: Erzeugen binären Code, daß die Maschine kann verstehen (0/1 Binärcode)
Verknüpfung: die drei vorherigen Operationen werden separat für jede Datei durchgeführt, aber wir müssen die Adresszuordnung jeder Variablen, Zeiger, Funktion für das Ganze bearbeiten projizieren Sie hier, wenn wir einige Probleme haben werden, wenn wir eine mehrfache Definition der Variablen haben, weil das Verknüpfen alle Dateien überprüft und eine Ausgabe für das gesamte Projekt erzeugt.
Wenn eine Bibliothek als statisch deklariert ist, kann die deklarierte und definierte Funktion innerhalb dieser Bibliothek nicht vor der Laufzeit verwendet werden, aber in der Kompilierzeit ist es nicht erlaubt, diese Bibliothek in anderen Dateien zu verwenden, wenn dies der Fall ist wir werden Fehler während der Verknüpfungsstufe bekommen, weil der Compiler die Verwendung der Funktion innerhalb dieser statischen Bibliothek durch eine andere Datei herausfinden wird, die nicht erlaubt ist.
Wenn Sie möchten, dass es statisch ist, verwenden Sie das Laufzeitkonzept, um diese Bibliothek zu verwenden (z. B. in C können Sie den Zeiger verwenden, um zu funktionieren.
Aber warum wurde dies vom Linker nicht bemerkt, bis ich zu STATIC wechselte?
Laufzeit-Linker ermöglicht doppelte Symboldefinitionen (nur eine wird zur Laufzeit verwendet, dies ist symbol interposition).
- 1. Ausnahmeausbreitung in extern verknüpften C-Bibliotheken
- 2. Kann die Eingabe einer dynamisch erstellten Komponente dynamisch gehandhabt werden?
- 3. wie externe Bibliotheken in Kivy
- 4. Wie können externe Bibliotheken in ITCSS-Projekte eingebunden werden?
- 5. WebStorm externe Bibliotheken Erklärung
- 6. Wie verschachtelte Bedingungen gehandhabt werden
- 7. Wie externe Bibliotheken in Angular Class Starter
- 8. Wie kann JSON mit VBA ohne externe Bibliotheken analysiert werden?
- 9. MCP externe Bibliotheken hinzufügen
- 10. SWTJar und externe Bibliotheken
- 11. Wie werden Importanweisungen in plpython gehandhabt?
- 12. Angular JS und externe Bibliotheken
- 13. Maemo/Symbian und externe Bibliotheken
- 14. Wie verschleiern Dateien ohne externe Bibliotheken?
- 15. Wie findet man den PHDR von dynamisch verknüpften/geladenen Bibliotheken von einem Kernelmodul?
- 16. Wie werden Formulareingaben und Validierungen in React-redux gehandhabt?
- 17. Debugging in externe Bibliotheken in QtCreator
- 18. Typescript Compiler - Externe Bibliotheken bündeln
- 19. Fallback für externe Webpack-Bibliotheken
- 20. interne versus externe Bibliotheken Java
- 21. Wie können dynamisch geladene Bibliotheken mit Valgrind verfolgt werden?
- 22. Wie verschachtelte Git-Repositories gehandhabt werden
- 23. Externe JavaScript-Bibliotheken automatisch bündeln
- 24. Schriftfamilieneigenschaft - wie werden nicht standardmäßige Schriftarten gehandhabt?
- 25. Der Versuch, fügen externe Bibliotheken in jsFiddle
- 26. Wie man externe Javascript-Bibliotheken dynamisch zu den erstellten/aktualisierten Elementen in React hinzufügt
- 27. Wie sollen die hundertsten Geburtsdatenfelder gehandhabt werden?
- 28. Apache Flink: Wie werden späte Ereignisse gehandhabt?
- 29. Kraft-beenden, wenn externe xlsm Bibliotheken referenziert werden und offen
- 30. SBT und externe Bibliotheken in Intellij