【问题标题】: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】:

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

          【讨论】:

            【解决方案6】:

            好问题。

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

            *.lib 可以在有人想要使用您的代码中的函数时使用。

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

            Static linking vs dynamic linking

            【讨论】:

              猜你喜欢
              • 2011-05-27
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-09-24
              • 1970-01-01
              • 1970-01-01
              • 2021-07-30
              相关资源
              最近更新 更多