链接什么是什么意思?

时间:2014-04-20 01:49:06

标签: c++ compiler-construction linker

我经常听到“#34;”链接到图书馆"。 我是编译器的新手,因而是链接,所以我想更多地了解这一点。

链接库是什么意思,何时不这样做会导致问题?

1 个答案:

答案 0 :(得分:13)

图书馆是一个"档案馆"包含已编译的代码。通常,您希望使用现成的库来使用一些您不希望自己实现的功能(例如,解码JPEG,解析XML,为您提供GUI小部件,您可以命名)。

通常在C和C ++中使用库是这样的:你#include包含函数/类声明的库的一些标题 - 即它们告诉编译器你的符号需要确实存在,而不是实际提供他们的代码。无论何时使用它们,编译器都会在目标文件中放置一个占位符,该占位符表示当其余的对象模块可用时,将在链接时解析该函数​​调用。

然后,在链接的那一刻,你必须指定实际的库,在那里找到库的功能的编译代码;然后,链接器将链接此编译的代码并生成最终的可执行文件(或者,在动态库的情况下,它将为加载程序添加相关信息以在运行时执行动态链接)。

如果您没有指定要链接库,链接器将具有未解析的引用 - 即它将看到某些函数已声明,您在代码中使用它们,但它们的实现无处可去被发现;这是臭名昭着的"未定义的参考错误的原因"。

请注意,所有这些过程都与编译由多个.cpp文件组成的项目时通常会发生的过程相同:每个.cpp都是独立编译的(了解其他文件中定义的函数)通过原型,通常用.h文件编写),最后一切都链接在一起产生最终的可执行文件。