【问题标题】:Why do we need *.lib files? [closed]为什么我们需要 *.lib 文件? [关闭]
【发布时间】:2013-12-28 19:09:40
【问题描述】:
我似乎不明白 *.lib 文件的需要。假设我有 3 个 *.c 文件:
module1.c
module2.c
module3.c
myheaders.c
在每个 .c 文件中,我们有 2 个函数。现在,如果我从 module1.c 调用 module3.c 中的函数 x,module1.c 通过查看 myheaders.c 来了解函数 x。
因此,如果我在 VS 中编译它,我会得到一个没有附加 *.lib 文件的闪亮小型便携式 *.exe,那么为什么以及何时需要 *.lib 文件?
【问题讨论】:
标签:
c++
c
header
shared-libraries
static-libraries
【解决方案1】:
*.lib 文件适用于希望在自己的程序中使用您的函数的其他程序员。
*.exe 文件适用于只想运行您的程序的最终用户。
【解决方案2】:
库可以由经过测试的相关函数组组成。它们允许您重用代码,而不必每次都经过编译阶段。
动态或共享库允许您升级可执行文件的某些部分,而无需重新编译或更改可执行文件。
在较大的项目中,程序的验证是日程安排的很大一部分。已经过测试的库会缩短时间,让大家开心。
【解决方案3】:
假设我写了一个编译器。我实现了一些 IO 函数(英文 - cout)在 Windows 上工作。如果您编写代码,并想用我的编译器编译它,您不想在每次编译时等待我的 cout 实现编译。不仅如此,你不关心HOW,所以你不需要源代码(witch会占用一些内存)。因此,您无需重新编译代码,而是获得一个具有该功能的 *.lib 文件,由我编译一次,无需携带繁重的源代码。
当您向某人出售您编写的与其他程序一起使用的程序时,您(通常)不想给他源代码 - 只是功能。
如果两种语言共享相同的函数标准(或者如果链接器知道不同的标准),我可以用一种语言编写一些代码,将其编译为 *.lib,然后将其与不同的语言一起使用。在您下载一些用您不使用的语言编写的第三方代码之前,这看起来没什么用。
【解决方案4】:
头文件不包含函数,它们只包含原型,因此编译器知道如何调用它们。在预定义函数的情况下,它们是单独的预编译器,作为引用(库)的 .lib 文件,因此要调用它们,您将需要该 .lib 文件和头文件,以便编译器知道如何调用它们。当您使用 VS 或任何编译器进行编译时,还有另一个称为链接的过程,它将这些文件链接为单个可执行文件。
【解决方案5】:
因为库可以在很多程序中使用。
您的头文件仅对您的教授是必需的