![]() |
1
7
链接器在C/C++构建中起着重要作用,以解决外部依赖关系。NET语言不使用链接器。
链接器在链接时解析第一个,不会发生复杂的事情,因为链接器知道依赖项的地址。后一步高度依赖于平台。在Windows上,必须为链接器提供导入库。一个非常简单的文件,它只声明DLL的名称和DLL中导出定义的列表。链接器通过在代码中输入一个跳转并向外部依赖关系表中添加一条指示跳转位置的记录来解析依赖关系,以便在运行时对其进行修补。DLL的加载和导入表的设置由Windows加载程序在运行时完成。这是一个鸟瞰的过程,有很多无聊的细节,使这尽快发生。
值得注意的是,对于构建时可用的外部依赖项,也存在差异。C/C++编译器一次编译一个源文件,依赖项由链接器解析。托管编译器通常将创建程序集的所有源文件作为输入,而不是一次编译一个。事实上,单独编译和链接是受支持的(.netmodule和al.exe),但可用的工具不支持单独编译和链接,因此很少进行单独编译和链接。此外,它不能支持扩展方法和分部类等特性。因此,托管编译器需要更多的系统资源才能完成任务。在现代硬件上随时可用。C/C++的构建过程是在这些资源不可用的时代建立的。 |
![]() |
2
2
符号分辨率 . 在一般情况下,它的工作原理是这样的(我试图让它保持操作系统的中立性):
|
![]() |
3
1
|
![]() |
4
0
按库,您指的是DLL,对吗?
|
![]() |
Nicola · C++CLI项目中非托管数据上的C#指针 7 年前 |
![]() |
Anton Savelyev · 在发布版本中删除类指针会导致内存问题 7 年前 |
![]() |
shmnff · 显式转换int到SqlInt32 7 年前 |
![]() |
Alex12 · windows窗体中的C++if语句[关闭] 7 年前 |
![]() |
Claude Tan · 类型定义和类型引用之间有什么区别? 7 年前 |