Poszukuję tego terminu "eksportowanie symbolu". Co oznacza eksportowanie symbolu w języku C/C++ lub w odniesieniu do bibliotek (współużytkowanych/statycznych)? Skąd eksportujemy symbole i dlaczego? Jaka jest relacja eksportu symbolu do nazwy "mangring" przez kompilator?Co oznacza eksportowanie symbolu?
Odpowiedz
Wyeksportowanie symbolu oznacza "reklamowanie" jego istnienia w pliku/bibliotece obiektu i gdzie jest, aby można było go zaimportować (= połączyć z) przez inne moduły.
Łącze może być wykonane statycznie lub dynamicznie, ale tak czy inaczej linker musi wiedzieć, czym jest symbol, i gdzie on jest, a wyeksportowany symbol i zaimportowany symbol muszą pasować do niego. Z tym wiąże się mangling nazw (wymazanie nazw C++ zawiera definicję typu symbolu w nazwie symbolu, a zniekształcanie wyeksportowanego i importowanego symbolu musi pasować do linkera, aby poprawnie powiązać import-eksport).
Przykład:
Załóżmy, że masz biblioteki "STANDARDC" (losowa nazwa) i Twój program SOMEPROG. Program SOMEPROG musi drukować na konsoli, więc zadzwoni pod numer printf
. Ale faktycznie nie implementujesz printf
w swoim programie SOMEPROG, po prostu go używasz (= importuj), a implementacja jest gdzie indziej.
Biblioteka STANDARDC ma listę eksportowanych symboli, które obejmują wszystkie funkcje zaimplementowane w tej bibliotece i mogą być wywoływane z zewnątrz (= wyeksportowane funkcje). printf
jest jedną z takich funkcji, więc pojawi się na wyeksportowanej liście.
Kompilator przechodzi przez SOMEPROG.C i widzi, że odwołujesz się do printf
, ale nie ma na to żadnej implementacji. Kompilator dodaje printf
do listy zaimportowanych symboli dla wynikowego pliku SOMEPROG.obj, aby linker mógł połączyć rzeczywistą implementację.
Łącznik pobiera plik SOMEPROG.obj i plik STB STANDARD. jakie funkcje są używane w SOMEPROG.obj. Łącznik stwierdza, że printf
nie jest zaimplementowany, jest zaimportowany, więc linker przegląda wszystkie pliki .lib, które posiada i znajduje pasujące printf
na wyeksportowanej liście STANDARDC. Wymaga wdrożenia printf
ze STANDARDC i łączy go z programem wszędzie tam, gdzie odwołujesz się do zaimportowanego symbolu printf
.
- 1. Eksportowanie symbolu globalnego z biblioteki DLL Delphi
- 2. Co oznacza numer 16 w symbolu DLL _FooBar @ 16?
- 3. Co oznacza symbol @ w R?
- 4. Co oznacza (+ var) oznacza
- 5. Co oznacza ten symbol zaćmienia?
- 6. Co znaczy: co oznacza?
- 7. Co oznacza = *?
- 8. Co oznacza "::"?
- 9. Co oznacza xmlns = "" dokładnie oznacza
- 10. co oznacza „$ &” oznacza w Ruby
- 11. Co to jest rozdzielczość symbolu?
- 12. Co oznacza `<< =` w SBT?
- 13. Co oznacza symbol tylda (~) w CSS
- 14. Co oznacza symbol "To" w Scali?
- 15. Co robi "eksportowanie" w programowaniu powłoki?
- 16. Co oznacza 0x0F? A co oznacza ten kod?
- 17. Co oznacza "CL" w komunikacie zatwierdzenia? Co to oznacza?
- 18. Co oznaczają nazwy katalogów "." i ".." oznacza i co oznacza faDirectory?
- 19. Co oznacza "?", Używane po nazwie pliku JavaScript, co oznacza?
- 20. Co oznacza <- oznacza w Javie?
- 21. Co oznacza "~" oznacza, zanim teksty stałe
- 22. Co oznacza "! []" Składnia wiązu w Todomvc oznacza
- 23. Co oznacza "[to]" oznacza w języku C++
- 24. Co oznacza $ f oznacza w skryptach jquery?
- 25. Co oznacza podwójny wykrzyknik !! operator oznacza?
- 26. Co oznacza POCO?
- 27. Co oznacza layout_height = "0dp"?
- 28. Co oznacza SGBD?
- 29. Co oznacza "zasiew"?
- 30. NSLog 10b co oznacza?
poszukaj _declspec (dllimport/export), jestem pewien, że możesz znaleźć świetne wyjaśnienia. –
Ponadto, pytanie nie zostało odrzucone, ponieważ było duplikatem, ale prawdopodobnie dlatego, że zasugerowałeś SO z duplikatów i zignorowałeś sugestie. –
Dlaczego to jest offtopic? – littleadv