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

5

我似乎不理解*.lib文件的必要性。比方说,我有3个*.c文件:

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

在每个 .c 文件中,我们都有两个函数。如果我从 module1.c 调用 module3.c 中的函数 x,那么 module1.c 通过查看 myheaders.c 就知道了函数 x 的存在。
因此,如果我在 VS 中编译它,我将得到一个闪亮的小型可移植 *.exe 文件,没有附带 *.lib 文件,所以什么时候需要使用 *.lib 文件呢?

http://en.wikipedia.org/wiki/Library_(computing) - user529758
1
"3" ... 我觉得它的意思不是你想的那样。 - Kerrek SB
6个回答

3

*.lib文件是给其他程序员使用您的函数在他们自己的程序中。

*.exe文件是给最终用户运行您的程序。


2

库可以由一组相关的已测试函数制成。它们允许您重复使用代码,而无需每次都进行编译。

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

在较大的项目中,验证程序是计划的一个重要部分。已经测试过的库将缩短计划时间并使每个人都感到满意。


0
假设我写了一个编译器。我实现了一些IO函数(英文中的cout)以在Windows上工作。如果你想用我的编译器编译代码,你不想等待每次编译我的cout实现。更重要的是,你不关心如何实现,所以你不需要源代码(会占用一些内存)。因此,你可以得到一个*.lib文件,其中包含功能,由我编译一次,没有沉重的源代码需要携带。
当你向别人出售你编写的程序以供其他程序使用时,你通常不想给他源代码 - 只需要功能。
如果两种语言共享相同的函数标准(或者链接器知道不同的标准),我可以在一种语言中编写一些代码,将其编译为*.lib,然后在不同的语言中使用它。这看起来并不有用,直到你下载一些用另一种语言编写的第三方代码。

0
头文件不包含函数,它们只包含原型,以便编译器知道如何调用它们。对于预定义函数,它们被单独预编译为 .lib 文件,该文件引用(库)以便调用它们,因此您需要该 .lib 文件和头文件,以便编译器知道如何调用它们。当您使用 VS 或任何编译器进行编译时,还有一个称为链接的过程,将这些文件链接为单个可执行文件。

0

因为库可以在许多程序中使用。 你的头文件仅对你的专业课程是必需的。


0

好问题。

*.exe代表可执行文件。这个可执行文件可以用于终端用户或开发人员运行程序。

*.lib可用于当有人想要使用你的代码中的函数时。

有两种类型的链接库:静态链接和动态链接。请参考此问题以了解它们之间的区别。

静态链接与动态链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接