c++ - 链接到某物是什么意思?

标签 c++ compiler-construction linker

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

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

最佳答案

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

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

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

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

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

关于c++ - 链接到某物是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23177550/

相关文章:

gcc - 为什么底部测试循环更可取?

macos - ld OS X : unknown option -z

c++ - 多次链接单个跨平台目标文件?

c - 如何强制链接器将字符串数组的 const 数组存储到闪存中(而不是 RAM)

c++ - 通过参数传递成员函数指针并存储它们

c++ - 声明全局常量和在使用它的函数内部声明常量有什么区别

c - 为什么结构的大小不等于其各个成员类型的大小之和?

c++ - 编译器以获得更好的模板支持

c++ - cmake 会忽略 .hpp 文件更改吗?

c++ - QApplication::exec() 拒绝返回(在控制台程序中)