为什么我们需要* .lib文件?

时间:2013-12-28 19:09:40

标签: c++ c header shared-libraries static-libraries

我似乎不了解* .lib文件的需要。假设我有3 * .c文件:

module1.c
module2.c
module3.c
myheaders.c

在每个.c文件中,我们有2个函数。现在,如果我从module1.c调用module3.c中的函数x,则module1.c通过查看myheaders.c来了解函数x。

因此,如果我在VS中编译它,我会得到一个闪亮的小型可移植* .exe,没有附加* .lib文件,那么为什么以及何时需要* .lib文件?

7 个答案:

答案 0 :(得分:3)

* .lib文件适用于希望在自己的程序中使用函数的其他程序员。

* .exe文件适用于只想运行程序的最终用户。

答案 1 :(得分:2)

可以从已经过测试的相关功能组中创建库。它们允许您重用代码,而无需每次都经过编译阶段。

动态或共享库允许您升级可执行文件的一部分,而无需重新编译可执行文件或更改它。

在较大的项目中,程序的验证是计划的很大一部分。已经过测试的图书馆将缩短日程安排,让每个人都满意。

答案 2 :(得分:1)

更容易共享一个lib / dll文件,然后共享53个源文件,加上获取它的用户无法看到可能有或可能没有加号的源。

.

编辑:我建议您阅读:http://en.wikipedia.org/wiki/Library_(computing)

Edit2:没有看到“H2CO3”在我面前发布链接:/

答案 3 :(得分:0)

假设我写了一个编译器。我实现了一些IO函数(英文 - cout)来处理Windows。如果你编写代码,并想用我的编译器编译它,你不想等待每次编译我的cout实现编译。更重要的是,你不关心HOW,所以你不需要源代码(女巫会占用一些内存)。因此,不是重新编译代码,而是获得带有功能的* .lib文件,由我编译一次,没有重要的源代码。

当你向某人出售你编写的用于其他程序的程序时,你(通常)不想给他提供源代码 - 只是功能。

如果两种语言共享相同的功能标准(或者如果链接器知道不同的标准),我可以用一种语言编写一些代码,将其编译为* .lib,然后使用不同的语言。在您下载使用您未使用的语言编写的某些第三方代码之前,这看起来并不有用。

答案 4 :(得分:0)

头文件不包含该函数,它们只包含原型,因此编译器知道如何调用它们。在预定义函数的情况下,它们是预编译器分别作为.lib文件引用(库)所以为了调用它们,你需要.lib文件和头文件,以便编译器知道如何调用它们。当您使用VS或任何编译器进行编译时,还有另一个称为链接的进程将这些文件作为单个可执行文件链接。

答案 5 :(得分:0)

因为库可以在很多程序中使用。 您的头文件仅对您的教授

是必需的

答案 6 :(得分:0)

好问题。

* .exe代表可执行文件。此可执行文件可用于从最终用户或开发人员运行该程序。

*。当有人想要使用代码中的函数时,可以使用lib。

有两种类型的链接库。静态链接和动态链接。按照这个问题来理解它们之间的区别。

Static linking vs dynamic linking