我经常听到“链接到库”这个词。 我是编译器和链接的新手,所以我想更多地了解这一点。
链接库是什么意思,什么时候不这样做会导致问题?
最佳答案
库是包含已编译代码的“文件”。通常,您希望使用现成的库来使用一些您不想自己实现的功能(例如解码 JPEG、解析 XML、为您提供 GUI 小部件,等等)。
通常在 C 和 C++ 中使用库是这样的:您 #include
包含函数/类的库的一些 header declarations - 即它们告诉编译器您需要的符号确实存在于某个地方,而没有实际提供它们的代码。每当您使用它们时,编译器都会在目标文件中放置一个占位符,表示该函数调用将在链接时解析,此时其余的目标模块将可用。
然后,在链接的那一刻,您必须指定要在其中找到库函数的编译代码的实际库;然后,链接器会将编译后的代码与您的代码链接并生成最终的可执行文件(或者,在动态库的情况下,它将为加载程序添加相关信息以在运行时执行动态链接)。
如果您未指定要链接的库,则链接器将具有未解析的引用 - 即它会看到一些函数已声明,您在代码中使用了它们,但找不到它们的实现;这就是臭名昭著的“ undefined reference 错误”的原因。
请注意,所有这些过程与编译由多个 .cpp
文件组成的项目时通常发生的过程相同:每个 .cpp
都是独立编译的(知道其他函数中定义的函数仅通过原型(prototype)定义,通常编写在 .h
文件中),最后将所有内容链接在一起以生成最终的可执行文件。
关于c++ - 链接到某物是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23177550/