代码之家  ›  专栏  ›  技术社区  ›  wheaties

向非专业人员解释DLL依赖项

  •  3
  • wheaties  · 技术社区  · 14 年前

    这源于 previous posting 我弥补了软件安装缺乏一台干净的测试机的问题。我在解释DLL依赖项如何工作以及某些计算机在安装时可能没有正确的库方面做得不好。问题是它被视为构建过程中的缺陷。我试图教育高等教育,这不是建设过程本身,而是安装过程,这是责任。

    下面是我的老板关于分包商工作和我们工作的一个引言,目的是透视:

    我不是软件人。我所看到的是,当他们把东西交给我们的时候,它是有效的,但是当我们把东西交给客户的时候,有各种各样的问题。您构建代码的方式一定有问题。

    [编辑]当分包商应用程序到达时,可以将它们直接复制到我们的开发机器上,因为我们的机器包含所有正确的Microsoft运行库。然而,在客户机上,并不是所有的机器都包含这些依赖关系。[/edit]很容易看出聪明的人(非常聪明)是如何得出错误的结论的。那么,您如何解释整个DLL依赖性问题呢?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Sam Holder    14 年前

    你可以用一个他可能更熟悉的类比。比如搬进一个新办公室。

    假设你是一个承包商,你决定搬进一个新办公室。你列出了你认为你在新办公室、互联网、电话、传真、复印机、压力球等方面需要的所有东西,然后你决定搬到一个共享的办公室,那里已经有很多这样的东西,还有更多。所以你搬进来。你随身带着它还没有的东西,比如压力球、盆景树等等。

    你不知道的是,除了你清单上的所有东西之外,还有一些你开始在共享办公室使用的其他东西,比如咖啡机、打孔器等。你这样做是很不小心的,这样你就不会把这些东西加到你的“必需品”清单上。

    然后,你和办公室里的一些人闹翻了,所以你决定,到底怎么回事,你一个人去,找一个全新的,空荡荡的办公室。所以你拿出你所需要的所有东西的清单,打个电话开始订购。伟大的。除了当你搬进新办公室时,你意识到没有咖啡机、打孔器等。

    所以,虽然你仍然像以前一样有能力,但你不能完全完成你的工作,因为你需要的一些依赖性是不可用的。

    所以在这个“你”是你写的软件,办公室是你安装的机器,依赖关系是你的软件依赖的东西,以及你需要它的列表,安装构建过程。

    也许吧。。。

        2
  •  2
  •   Michael Madsen    14 年前

    他是对的,你做了一些错误的事情,因为如果他们不是标准的系统DLL,你应该用程序打包这些DLL,可能使用安装程序来获得必要的系统先决条件。如果不允许这样做,那么您需要做不同的事情,比如使用静态链接(在可执行文件中包含必要的代码)。

    然而,这里有一个类比,你可以用它来解释问题是什么。

    程序本质上是一个知道如何完成一个特定任务的工人(它可以是一个非常复杂的任务,包含许多子任务或非常简单的任务,但最后它仍然只是一个任务)。为了完成这些任务,他必须使用一些工具-DLL。

    不同的任务需要不同的工具-就像你需要锯子,而不是锤子一样,如果你想把木板切成两半,你需要不同的DLL来完成不同的任务。

    如果没有合适的工具(DLL),那么工人(程序)就不能完成他的工作,因为他的任务 取决于 在那些工具上。如果他不能完成他的工作,他会告诉你“我没有这个工具,我需要它来做我应该做的。”

    这就是你的客户所发生的事情:你给他们工人(程序),但你没有给他们工具(DLL),工人没有给他们(静态链接)。