我一直在尋找這個術語「導出符號」。在C/C++或庫(共享/靜態)中導出符號意味着什麼?我們從哪裏出口這些符號?爲什麼?導出符號與編譯器名稱混合的關係是什麼?輸出符號是什麼意思?
7
A
回答
16
導出符號意味着「廣告」它在對象文件/庫中的存在以及它的位置,以便它可以被其他模塊導入(=鏈接到)。
鏈接可以靜態或動態完成,但無論哪種方式,鏈接器都必須知道符號是什麼以及它在哪裏,導出的符號和導入的符號必須匹配才能發生。名稱變形與此相關(C++名稱變形在符號名稱中包含符號的類型定義,並且導出和導入符號的變形必須與鏈接器正確鏈接導入導出相匹配)。
例子:
假設你有一個圖書館 「STANDARDC」(隨機名稱)和程序SOMEPROG。程序SOMEPROG需要打印到控制檯,因此它將調用printf
。但是你實際上並沒有在你的程序SOMEPROG中實現printf
,你只是使用它(=導入它),而實現在別處。
STANDARDC庫有一個它導出的符號列表,其中包括在該庫中實現的所有功能,可以從外部調用(=導出的函數)。 printf
是這樣的函數之一,所以它會出現在導出的列表中。
編譯器檢查您的SOMEPROG.C,發現您引用了printf
,但沒有實現它。編譯器將printf
添加到生成的SOMEPROG.obj的導入符號列表中,供鏈接器鏈接實際的實現。
鏈接器將您的SOMEPROG.obj文件和STANDARDC .lib文件SOMEPROG.obj中使用了哪些函數。鏈接器發現printf
未實現,它被導入,因此鏈接器將查看它所有的.lib文件,並在導出的STANDARDC列表中找到匹配的printf
。它需要執行STANDARDC中的printf
,並將它鏈接到您的程序中的任何地方,因爲您引用導入的符號printf
。
相關問題
- 1. &符號是什麼意思?
- 2. 符號「⊇」是什麼意思?
- 3. 這個輸出中的符號「@」是什麼意思?
- 4. 符號「#!」是什麼意思?在Python中的意思是?
- 5. Linux中的符號^ \意思是什麼
- 6. TSQL中的「#」符號是什麼意思?
- 7. 符號T(n)是什麼意思?
- 8. JavaScript中的$符號是什麼意思?
- 9. makefile符號$ @和$ <是什麼意思?
- 10. 符號是什麼!{JSON.stringify(t(「some.thing」))};意思?
- 11. 這個MSVC符號是什麼意思?
- 12. PowerShell中的&符號是什麼意思?
- 13. JSP中的$符號是什麼意思
- 14. 管道符號是什麼意思?
- 15. 這個符號是什麼意思:: =?
- 16. CV符號是什麼意思?
- 17. 這個eclipse符號是什麼意思?
- 18. 這個符號是什麼意思?
- 19. 在R中「:=」符號是什麼意思?
- 20. Javascript中的符號「:」是什麼意思?
- 21. 逗號運算符是什麼意思?
- 22. JQuery的「$」符號是什麼意思?
- 23. 符號<>是什麼意思?
- 24. 符號「$ .something = {」是什麼意思?
- 25. <#=符號是什麼意思?
- 26. 這些git符號是什麼意思?
- 27. 插入符號(^)是什麼意思?
- 28. 冒號是什麼意思?
- 29. 問號是什麼意思?
- 30. python中的輸出是什麼意思?
尋找_declspec(dllimport/export),我相信你可以找到很好的解釋。 –
此外,這個問題沒有被降低,因爲它是一個重複的,但可能是因爲你被重複建議,你忽略了這些建議。 –
它爲什麼不重要? – littleadv