导出符号意味着在您的目标文件/库中“宣传”其存在以及其位置,以便其他模块可以导入(链接到)它。链接可以静态或动态完成,但无论哪种方式,链接器都必须知道符号是什么,它在哪里,导出的符号和导入的符号必须匹配,才能进行链接。名称重整与此相关(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的任何位置。