我一直在寻找这个术语“导出符号”。在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