5
A
回答
5
gcc不知道。它知道有一個函數printf
,它知道如何調用它,但它生成的目標文件包含對未解析符號的調用。
該符號然後由鏈接器解析,該鏈接器提供所有對象文件和庫。鏈接器在庫中找到符號printf
,並在其組合所有相關模塊之後,它更新未解析的調用。
相關問題
- 1. 如何使用備用GCC編譯器編譯/鏈接
- 2. 如何讓C++編譯器知道一個函數是`Idempotent`
- 3. GCC鏈接kerberos靜態編譯CURL
- 4. 如何使用gcc編譯和鏈接python3包裝函數
- 5. C++:鏈接文件與GCC編譯器
- 6. boost和gcc&make - 編譯器和版本不可知鏈接
- 7. 編譯動態鏈接庫
- 8. 編譯動態鏈接庫
- 9. 如何知道編譯器是否執行內存對齊?
- 10. 編譯器如何知道是否要擴展零或一個?
- 11. 如何在編譯時靜態鏈接libevent和gcc?
- 12. 我如何知道鏈接被看到
- 13. 如何知道函數是否完成?
- 14. 編譯器如何知道我的主函數在哪裏?
- 15. 鏈接器如何選擇使用不同編譯器編譯的動態庫
- 16. 是否可以在HPUX上使用gcc編譯/鏈接到occi?
- 17. 我如何知道我使用的是哪個版本的gcc編譯器?
- 18. 是否有GCC編譯器/鏈接器選項來更改主名稱?
- 19. 如何知道函數是否被第一次調用
- 20. 如何動態鏈接GCC對象?
- 21. 編譯器如何知道每個靜態變量調用一次函數?
- 22. 我如何知道哪些庫被動態鏈接到靜態庫中?
- 23. LLVM 5.0編譯器是否等同於GCC編譯器?
- 24. 如何知道函數是否接受參數?
- 25. 如何知道類型參數是否是動態的?
- 26. Hoes是否知道HAML編譯器何時結束?
- 27. Ç - 動態鏈接用gcc
- 28. 如何找到函數是否在編譯時是靜態的
- 29. 如何知道我的文件是否被正確翻譯
- 30. 編譯器如何知道您使用的函數是系統調用?
它如何知道應該靜態解析(printf)(鏈接時間)還是動態解析(運行時間)? – 2011-04-04 06:43:57
編譯器留下一個佔位符來調用'printf'。它不知道函數的位置,所以它只是調用一些僞造的地址並將其標記爲鏈接器來修復。鏈接器知道這個函數存在於一個動態加載的庫中(你這樣說),並且標記它以便OS加載器修復。然後OS在加載時解決這個問題,當它加載庫(或者它已經加載)並且知道'printf'的真實地址時。 – 2011-04-04 07:26:59
對,這就是過程鏈接表的工作原理,但鏈接器如何知道像'printf'這樣的函數是否應該首先由操作系統或其本身解決? **我們如何告訴它? – 2011-04-04 07:31:38