与某事相联系意味着什么
What does it mean to link against something?
我经常听到术语"链接到库"。我是编译器和链接的新手,所以我想更多地了解这一点。
链接到库意味着什么?不这样做什么时候会引起问题?
库是一个包含已编译代码的"归档"。通常,您希望使用现成的库来使用一些您不想自己实现的功能(例如,解码JPEG、解析XML、为您提供GUI小部件,等等)。
在C和C++中,使用库通常是这样的:#include
库的一些标头包含函数/类声明,即它们告诉编译器您需要的符号确实存在于某个地方,而实际上没有提供它们的代码。无论何时使用它们,编译器都会在对象文件中放置一个占位符,表示该函数调用将在链接时解析,此时其他对象模块将可用。
然后,在链接时,您必须指定实际的库,在该库中可以找到该库函数的编译代码;然后,链接器将把编译后的代码与您的代码链接起来,并生成最终的可执行文件(或者,在动态库的情况下,它将添加相关信息,以便加载程序在运行时执行动态链接)。
如果你没有指定链接库,链接器将有未解析的引用——也就是说,它会看到一些函数已经声明,你在代码中使用了它们,但找不到它们的实现;这就是臭名昭著的"未定义引用错误"的原因。
请注意,所有这些过程都与编译由多个.cpp
文件组成的项目时通常发生的过程相同:每个.cpp
都是独立编译的(只通过原型了解其他文件中定义的函数,通常用.h
文件编写),最后所有内容都链接在一起以生成最终的可执行文件。
相关文章:
- 这行代码在C++类中意味着什么
- 这对"With a stackless coroutine, only the top-level routine may be suspended."意味着什么
- @CPPFLAGS@在 Makefile.in 中意味着什么?
- 生成文件"relink"意味着什么?
- 从二进制流中读取时,将双精度变量的地址转换为 char* 意味着什么?
- 在这种情况下,"typename..."意味着什么?
- "in-situ without memory allocation" 字符串的愚蠢实现意味着什么?
- 使用typedef有什么用,它意味着什么
- GCC 的 -Wpsabi 选项究竟有什么作用?压制它意味着什么?
- 这在C++ "It does not own the underlying data, and so is cheap to copy or assign"中意味着什么
- 由于某种原因,我的代码中出现了 [json.exception.type_error.302]。我知道错误意味着什么,但我不知道哪里有故障
- 调用堆栈显示 SIGBUS,这意味着什么
- C++标准在[basic.scope.hiding]中"same scope"到底意味着什么?
- 评估对象的创建意味着什么?
- 当我们在 C++ 中说"initialize the object"时,它实际上意味着什么?
- C++这种结构"InterceptionKeyStroke &kstroke = * (InterceptionKeyStroke *) &stroke"意味着什么?
- 该语法在C 中意味着什么
- 链接标志对静态库意味着什么
- 由mpglib输出的"hip: Can't rewind stream by 74 bits"到底意味着什么?
- 这在 C# 中意味着什么以及如何使用它