繁体   English   中英

链接什么是什么意思?

[英]What does it mean to link against something?

我经常听到“连接图书馆”一词。 我是编译器的新手,因此我很想了解这一点。

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM