Tôi đã tìm cụm từ này "xuất khẩu biểu tượng". Việc xuất khẩu một biểu tượng có ý nghĩa gì trong C/C++ hoặc đối với các thư viện (được chia sẻ/tĩnh)? Từ đâu chúng ta xuất khẩu các biểu tượng và tại sao? Mối quan hệ của việc xuất khẩu một biểu tượng với tên mangling bởi trình biên dịch là gì?Ý nghĩa của việc xuất khẩu một biểu tượng là gì?
Trả lời
Xuất biểu tượng có nghĩa là "quảng cáo" sự tồn tại của nó trong tệp/thư viện đối tượng của bạn và vị trí của nó, để các mô-đun khác có thể nhập (= liên kết đến).
Liên kết có thể được thực hiện tĩnh hoặc động, nhưng cách liên kết phải biết biểu tượng là gì và nó ở đâu và biểu tượng đã xuất và ký hiệu đã nhập phải khớp với nó. Tên mangling có liên quan đến điều đó (C++ mangling tên bao gồm định nghĩa loại biểu tượng trong tên biểu tượng, và mangling của biểu tượng xuất khẩu và nhập khẩu phải phù hợp cho các mối liên kết để liên kết xuất nhập khẩu một cách chính xác).
Ví dụ:
Giả sử bạn có một thư viện "STANDARDC" (tên ngẫu nhiên) và SOMEPROG chương trình của bạn. Chương trình SOMEPROG cần in trên bảng điều khiển, vì vậy nó sẽ gọi printf
. Nhưng bạn không thực sự thực hiện printf
trong chương trình SOMEPROG của bạn, bạn chỉ cần sử dụng nó (= nhập nó), trong khi thực hiện là ở nơi khác.
Thư viện STANDARDC có danh sách các ký hiệu mà nó xuất bao gồm tất cả các hàm được triển khai trong thư viện đó và có thể được gọi từ bên ngoài (= chức năng được xuất). printf
là một trong những chức năng như vậy, do đó, nó sẽ xuất hiện trong danh sách xuất khẩu.
Trình biên dịch đi qua SOMEPROG.C của bạn và thấy rằng bạn tham chiếu printf
, nhưng không có triển khai cho nó. Trình biên dịch thêm printf
vào danh sách các biểu tượng đã nhập cho kết quả SOMEPROG.obj, để trình liên kết liên kết việc triển khai thực tế.
Trình liên kết sẽ lấy tệp SOMEPROG.obj của bạn và tệp STANDARDC .lib và thấy những hàm nào được sử dụng trong SOMEPROG.obj. Trình liên kết phát hiện rằng printf
không được triển khai, nó được nhập, do đó trình liên kết xem qua tất cả các tệp .lib mà nó có và tìm thấy phù hợp với printf
trong danh sách được xuất của STANDARDC. Việc thực hiện printf
từ STANDARDC và liên kết nó với chương trình của bạn ở mọi nơi bạn tham chiếu biểu tượng được nhập printf
.
- 1. Ý nghĩa của biểu tượng fiddler này là gì?
- 2. Ý nghĩa của biểu tượng $ trong jQuery là gì?
- 3. Ý nghĩa của biểu tượng '@' trong Oracle SQL là gì?
- 4. Ý nghĩa của "kết xuất chuỗi" là gì
- 5. Ý nghĩa của ∃ là gì?
- 6. Các biểu tượng có ý nghĩa gì trong preg_match?
- 7. Ý nghĩa của biểu thức "+ + a" là gì?
- 8. Ý nghĩa của -532459699 là gì?
- 9. Ý nghĩa của id là gì?
- 10. Các biểu tượng git này có ý nghĩa gì?
- 11. Các biểu tượng trong Eclipse có ý nghĩa gì?
- 12. Ý nghĩa SQL của 0x5E5B7D7E là gì?
- 13. Ý nghĩa của System.CLSCompliantAttribute là gì?
- 14. Ý nghĩa của biểu tượng "vector xóa destructor" trong VC++ là gì?
- 15. Android - ý nghĩa của StableID là gì?
- 16. Biểu tượng "Điều đó" có ý nghĩa gì trong Scala
- 17. Biểu tượng & ý nghĩa có ý nghĩa gì trong Mục tiêu-C?
- 18. ý nghĩa của "tóm lại" là gì
- 19. Ý nghĩa của typedef này là gì?
- 20. Ý nghĩa của /// trong JavaScript là gì?
- 21. Ý nghĩa của "UseTaskFriendlySynchronizationContext" là gì?
- 22. Biểu tượng này có ý nghĩa gì trong PHP <? =
- 23. Ý nghĩa của Giao dịch là gì?
- 24. Ý nghĩa của + trong CSS là gì?
- 25. Ý nghĩa của @_ trong Perl là gì?
- 26. Ý nghĩa của! #: 3 là gì?
- 27. Ý nghĩa của tệp dylib là gì?
- 28. Ý nghĩa của '==' trong C là gì?
- 29. Ý nghĩa của $$ trong Ruby là gì?
- 30. Ý nghĩa của svg: svg là gì?
tìm _declspec (dllimport/export), tôi chắc chắn bạn có thể tìm thấy các giải thích tuyệt vời. –
Ngoài ra, câu hỏi đã không được bình chọn vì nó là bản sao, nhưng có lẽ vì bạn đã được đề xuất bởi SO của các bản sao và bạn bỏ qua các đề xuất. –
Tại sao nó là ngoại tuyến? – littleadv