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

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

===============>>#1 票数:13 已采纳

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

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

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

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

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

  ask by user2030677 translate from so

未解决问题?本站智能推荐:

3回复

链接器如何处理具有不同链接的变量?

在C和C ++中,我们可以操纵变量的链接。 共有三种链接:无链接,内部链接和外部链接。 我的问题可能与为什么将这些称为“链接”有关(与链接器有何关系)。 我知道链接器能够通过外部链接处理变量,因为对该变量的引用不限于单个翻译单元,因此也不限于单个目标文件。 在操作系统课程中通常会讨论
2回复

链接器如何知道要链接的所有库?

来自http://www.learncpp.com/cpp-tutorial/19-header-files/ 链接器如何知道它需要包含标准运行时库,例如iostream中声明的函数的定义在其他地方不存在? 是否有一些映射可以促进链接过程? 重新措辞 - 如果我包含一些只包含
1回复

如何隐式链接库?

我有一个名为Aa的库,其.hpp文件名为A.hpp。 当程序需要使用该库时,它们#include“ A.hpp”,并像这样链接到它:g ++ test1.cpp Aa -o test1。 我希望只能像g ++ test1.cpp -o test1这样编译它,而无需在其中显式键入Aa,就像我不
3回复

如何动态链接GCC对象?

我不确定这个问题的措词是否正确,或者我想要什么。 我有一个现有的GCC应用程序(如果重要的话,可为Cortex-M3编译)。 我要做的是创建可以调用现有应用程序的一小部分功能(只是一个方法,几个方法)。 我想将这几种方法放在特定的内存位置(我知道该怎么做)。 我不知道该怎么做,就
1回复

OpenCV cvSmooth链接器错误

我正在使用XCode 4进行开发,并且我将OpenCV库链接在一起以创建一些实验项目。 如果发现问题,请尝试编译以下行: 问题: 我认为这些库不是针对64位体系结构编译的... 注意: 通过MacPorts安装的库
1回复

将错误与MinGW和FLTK链接

我对C ++知之甚少,我习惯Java编译如此简单! 无论如何,我正在尝试使用Eclipse Kepler编写实现FLTK图形库的程序。 我认为我的编译器是MinGW。 这是我构建程序时输出的内容: http://hastebin.com/jefepobula.vbs 这是代码(
1回复

SFML 2.1 RenderWindow链接错误

我的代码: 我的编译器调用: 错误信息: 我忘记链接的库中的RenderWindow吗? 我以为它在“窗口”中。.我正在运行SFML 2.1,并尝试了各种链接组合,所有这些都给我链接错误。 此链接链是给我最少错误的链接,即RenderWindow错误。 有人帮我弄清
1回复

链接C ++代码的问题

我想学习如何制作和使用静态库,但遇到了一些问题。 这就是我所做的。 首先,我编写了一些代码并将其放入String.h和String.cpp文件中。 然后将其编译为目标文件: mingw32-g++ -c -O2 -s -DNDEBUG String.cpp -o .\\obj\
6回复

编译的C ++类是什么样的?

有了汇编指令和C程序的一些背景知识,我可以看到编译函数的样子,但有趣的是我从来没有仔细考虑过编译后的C ++类是什么样的。 我跑了: 但是我得到的东西很难理解。 有人可以解释一下或提出一些好的起点。
12回复

C和汇编程序实际编译的是什么? [关闭]

所以我发现C(++)程序实际上并没有编译成简单的“二进制”(我可能在这里遇到了一些问题,在这种情况下我很抱歉:D)但是对于一系列事物(符号表) ,os相关的东西,...)但...... 汇编程序“编译”到纯二进制文件? 这意味着除了预定义的字符串等资源之外没有额外的东 如果C