与某事相联系意味着什么

What does it mean to link against something?

本文关键字:意味着 什么 相联系      更新时间:2023-10-16

我经常听到术语"链接到库"。我是编译器和链接的新手,所以我想更多地了解这一点。

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

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

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

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

如果你没有指定链接库,链接器将有未解析的引用——也就是说,它会看到一些函数已经声明,你在代码中使用了它们,但找不到它们的实现;这就是臭名昭著的"未定义引用错误"的原因。

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