Ich habe nach diesem Begriff "ein Symbol exportieren" gesucht. Was bedeutet das Exportieren eines Symbols in C/C++ oder in Bezug auf die Bibliotheken (shared/static)? Woher exportieren wir die Symbole und warum? Wie lautet die Beziehung zwischen dem Export eines Symbols und dem Namen Mangling durch den Compiler?Was bedeutet das Exportieren eines Symbols?
Antwort
Exportieren eines Symbols bedeutet "Werbung" seine Existenz in Ihrer Objektdatei/Bibliothek und wo es ist, so dass es von anderen Modulen importiert werden konnte (= verlinkt).
Link kann statisch oder dynamisch erfolgen, aber auf jede Art und Weise muss der Linker wissen, was das Symbol ist und wo es ist, und das exportierte Symbol und das importierte Symbol müssen übereinstimmen, damit es passiert. Der Name Mangling steht damit in Beziehung (C++ Name Mangling beinhaltet die Typdefinition des Symbols im Symbolnamen, und das Mangeln des exportierten und importierten Symbols muss übereinstimmen, damit der Linker den Import-Export korrekt verknüpft).
Beispiel:
Angenommen, Sie haben eine Bibliothek "STANDARDC" (random name) und Ihr Programm SOMEPROG. Programm SOMEPROG muss auf Konsole drucken, so dass es printf
aufrufen wird. Aber Sie implementieren nicht wirklich printf
in Ihrem Programm SOMEPROG, Sie verwenden es einfach (= importieren), während die Implementierung woanders ist.
Die Bibliothek STANDARDC verfügt über eine Liste der exportierten Symbole, die alle Funktionen enthält, die in dieser Bibliothek implementiert sind und von außen aufgerufen werden können (= exportierte Funktionen). printf
ist eine solche Funktion, so dass es in der exportierten Liste erscheint.
Der Compiler geht durch Ihre SOMEPROG.C und sieht, dass Sie printf
verweisen, aber es gibt keine Implementierung für sie. Der Compiler fügt die printf
der Liste der importierten Symbole für die resultierende SOMEPROG.obj, für den Linker die tatsächliche Implementierung in verknüpfen.
Der Linker nimmt Ihre SOMEPROG.obj-Datei und die STANDARDC .lib-Datei und sieht Welche Funktionen werden in der SOMEPROG.obj verwendet? Der Linker findet, dass printf
nicht implementiert ist, es wird importiert, so dass der Linker alle vorhandenen .lib-Dateien durchsucht und übereinstimmende printf
in der exportierten Liste von STANDARDC findet. Es dauert die Implementierung von printf
von STANDARDC und verbindet es in Ihr Programm, wo immer Sie das importierte Symbol printf
referenzieren.
- 1. Was bedeutet "private Schlüssel exportieren" (Makecert -pe)?
- 2. Was bedeutet ∃?
- 3. Was bedeutet das Präfix:
- 4. Was bedeutet das - C#
- 5. Was bedeutet das konvertieren?
- 6. Was bedeutet das? javascript: //
- 7. Was bedeutet das? Diese
- 8. Verwenden eines vorinstallierten Symbols
- 9. Was bedeutet "[das]" in C++ bedeutet
- 10. MySQL 1443: Was bedeutet das?
- 11. Was bedeutet das? "alienPosition = alien.position"
- 12. Was bedeutet das gs-Protokoll?
- 13. Was bedeutet das Schlüsselwort jsr?
- 14. Was bedeutet das externe Schlüsselwort?
- 15. Was bedeutet das Schlüsselwort "final"?
- 16. Schienen Protokolle. Was bedeutet das?
- 17. was bedeutet das Javascript bedeuten
- 18. Was bedeutet das Schlüsselwort KEY?
- 19. Was bedeutet das? (int &) a
- 20. Was bedeutet das mit 'type'
- 21. Go "& ^" Operator, was bedeutet das?
- 22. Was bedeutet das? Boolean Header
- 23. Was bedeutet das in Ruby?
- 24. C++ Was bedeutet das Prozentzeichen?
- 25. Was bedeutet das Suffix "h"?
- 26. $ .text (["someText"]) - Was bedeutet das?
- 27. Was bedeutet das() in Java?
- 28. C# Methodenparametersyntax - was bedeutet das?
- 29. XoffLimit, XonLimit - was bedeutet das?
- 30. Was bedeutet das Wort "wörtlich"?
suchen Sie nach _declspec (dllimport/Export), ich bin sicher, dass Sie große Erklärungen finden können. –
Außerdem wurde die Frage nicht abgelehnt, weil es ein Duplikat war, aber wahrscheinlich, weil Sie von SO der Duplikate vorgeschlagen wurden und Sie die Vorschläge ignoriert haben. –
Warum ist es offtopic? – littleadv