2012-02-12 28 views
8

http://www.learncpp.com/cpp-tutorial/19-header-files/链接器如何知道链接的所有库?

enter image description here

如何链接器知道它需要包括标准的运行时库和例如iostream中声明的函数的定义不存在其他地方?

是否有一些映射有利于链接过程?

要改写 - 如果我只包含一些只有函数声明的文件,那么任何链接器如何找出函数定义的位置?

+0

对于Linux env,这样的信息存储在gcc生成的elf文件中。 – tristan 2012-02-12 12:54:26

回答

5

如果使用g++,将总是链接标准C++库(-lstdc++)。

要绕过它,您可以使用gcc并链接一个不同的库。

编辑:链接器不知道什么东西。标准库自动链接,所以没有什么可以找出标准功能。如果你只声明了一些不在STL中的东西,并尝试在没有实际定义的情况下使用它,链接器将会失败。您必须手动链接库/ .o。

+0

看到我的更新.. – 2012-02-12 12:18:53

+0

顺便说一句,_whole_标准库总是链接?我的意思是:例如,假设我只使用了'printf'函数。在那种情况下,只有包含'printf'的二进制文件或整个标准库的二进制文件被链接? – Utku 2015-11-16 16:01:25

5

这只是您的链接器的默认设置之一。一般来说,如果你不想使用标准库,你可以告诉它而不是

而你总是必须明确告诉链接器链接到应用程序使用的任何附加库中。在函数定义完全基于包含声明的地方,它不会“弄清楚”。