链接某物是什么意思?

问题描述 投票:0回答:1

我经常听到“链接到库”这个术语。 我对编译器和链接很陌生,所以我想更多地了解这一点。

链接到库意味着什么?什么时候不这样做会导致问题?

c++ linker
1个回答
24
投票

库是包含已编译代码的“档案”。通常,您希望使用现成的库来使用一些您不想自己实现的功能(例如解码 JPEG、解析 XML、为您提供 GUI 小部件,等等)。

通常在 C 和 C++ 中使用库是这样的:你

#include
包含函数/类的库的一些标头声明 - 即它们告诉编译器您需要的符号确实存在于某处,而不实际提供它们代码。每当您使用它们时,编译器都会在目标文件中放置一个占位符,该占位符表示该函数调用将在链接时解析,此时其余目标模块可用。

然后,在链接时,您必须指定要在其中找到该库函数的编译代码的实际库;然后,链接器会将这个已编译的代码与您的代码链接起来并生成最终的可执行文件(或者,在动态库的情况下,它将添加加载器的相关信息以在运行时执行动态链接)。

如果您没有指定要链接的库,则链接器将具有未解析的引用 - 即,它将看到声明了一些函数,您在代码中使用了它们,但找不到它们的实现;这就是臭名昭著的“未定义的参考错误”的原因。

请注意,所有这些过程与编译由多个

.cpp
文件组成的项目时通常发生的过程相同:每个
.cpp
都是独立编译的(仅通过原型了解其他文件中定义的函数,通常编写为
.h
文件),最后所有内容都链接在一起以生成最终的可执行文件。

© www.soinside.com 2019 - 2024. All rights reserved.