2011-01-29 24 views
3

我是C++的新手,试图理解一切。我知道链接器将目标文件链接到任何外部文件。正确?链接器是否链接预处理器?或只是其他文件?对C++中的链接器感到困惑

例如在一个简单的Hello World程序中。链接器会与我的Hello World程序链接吗?

+3

我必须说我对维基百科相当深情`http://en.wikipedia.org/wiki/Linker_(计算)`,当然还有链接现在分成:( – Marlon 2011-01-29 03:07:54

+0

@Marlon:因为你裹它代码标记(反向代码)粘贴在裸露的链接将工作得很好 – 2011-01-29 03:17:33

+0

@Cody,我不得不把它贴在代码标签上,因为它在我粘贴它时破坏了:P – Marlon 2011-01-29 04:11:17

回答

0

链接器将链接库和.o文件。编译器将生成.o文件。预处理器将在编译过程中处理。

例如

步骤1:编译:克++ -c relatedFile.cpp

步骤2:链接:克++ -o proName relatObjFile.o(外部库)

1

在非常一般概括地说,链接器的主要功能是将您的Hello World程序与您在程序中调用的任何库例程(如prinf)一起打包为一个可执行文件,该文件可供OS加载到memeory并接收控制权转移。该包装在程序的地址空间中创建代码的安排。作为此任务的一部分,链接器必须通过在代码中“解析”符号,例如,将符号分配给可执行映像中的地址偏移量。链接器还创建一个重定位表,其中包含指向应该是绝对内存地址的某些全局符号的指针。由于绝对内存地址在链接时不可知,因此它们在加载时由OS加载程序确定,然后在传输控制权之前使用正确的绝对地址对可执行映像进行修补。