首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导出符号是什么意思?

导出符号是什么意思?
EN

Stack Overflow用户
提问于 2012-06-06 03:37:29
回答 1查看 6.8K关注 0票数 14

我一直在寻找这个术语“导出一个符号”。在C/C++或与库(共享/静态)相关的情况下,导出符号意味着什么?我们从哪里导出符号?为什么?输出一个名称被编译器破坏的符号有什么关系?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-06 03:38:36

导出一个符号意味着“公告”它在你的目标文件/库中的存在和它所在的位置,这样它就可以被其他模块导入(=链接到)。

链接可以是静态的或动态的,但无论哪种方式,链接器都必须知道符号是什么,以及它在哪里,并且导出的符号和导入的符号必须匹配才能发生链接。名称损坏与此相关(C++名称损坏包括符号名称中的符号类型定义,导出和导入的符号的损坏必须匹配,链接器才能正确链接导入-导出)。

示例:

假设您有一个库"STANDARDC“(随机名称)和您的程序SOMEPROG。程序SOMEPROG需要打印到控制台,所以它将调用printf。但是您并没有在您的程序SOMEPROG中实际实现printf,您只是使用它(=import it),而实现在其他地方。

STANDARDC库有一个它导出的符号列表,其中包括在该库中实现的所有函数,并且可以从外部调用(=导出函数)。printf就是这样的函数之一,因此它将出现在导出列表中。

编译器遍历您的SOMEPROG.C并看到您引用了printf,但是没有实现它。编译器将printf添加到结果SOMEPROG.obj的导入符号列表中,以便链接器在其中链接实际实现。

链接器获取您的SOMEPROG.obj文件和STANDARDC .lib文件,并查看SOMEPROG.obj中使用了哪些函数。链接器发现printf未实现,则将其导入,因此链接器将查找它拥有的所有.lib文件,并在导出的标准printf列表中找到匹配的STANDARDC。它从STANDARDC获取printf的实现,并在引用导入的符号printf的任何地方将其链接到程序中。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10903770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档