导出符号是什么意思
What does exporting a symbol mean?
我一直在寻找"导出符号"这个术语。导出符号在 C/C++ 中或相对于库(共享/静态)意味着什么?我们从哪里导出符号,为什么?导出编译器名称为重整的符号是什么关系?
导出符号意味着"宣传"它在目标文件/库中的存在以及它的位置,以便它可以被其他模块导入(=链接到)。
链接可以静态或动态完成,但无论哪种方式,链接器都必须知道符号是什么以及它在哪里,并且导出的符号和导入的符号必须匹配才能发生。名称重整与此相关(C++名称重整在符号名称中包含符号的类型定义,并且导出和导入的符号的重整必须匹配,链接器才能正确链接导入-导出)。
例:
假设你有一个库"STANDARDC"(随机名称)和你的程序SOMEPROG。程序 SOMEPROG 需要打印到控制台,因此它会调用printf
。但是你实际上并没有在你的程序 SOMEPROG 中实现printf
,你只是使用它(=导入它),而实现在其他地方。
库 STANDARDC 有一个它导出的符号列表,其中包括在该库中实现的所有函数,并且可以从外部调用(=导出函数)。 printf
是此类函数之一,因此它将出现在导出的列表中。
编译器通过你的 SOMEPROG。C 并看到您引用了 printf
,但没有实现它。编译器将printf
添加到生成的 SOMEPROG.obj 的导入符号列表中,以便链接器链接实际实现。
和 STANDARDC .lib 文件,并查看 SOMEPROG.obj 中使用了哪些函数。链接器发现printf
未实现,而是导入,因此链接器会查找它拥有的所有 .lib 文件,并在 STANDARDC 的导出列表中找到匹配的printf
。它从 STANDARDC 获取printf
的实现,并将其链接到您的程序中,只要您引用导入的符号printf
。
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?