【问题标题】:Delphi what happens when linking packages?Delphi 链接包时会发生什么?
【发布时间】:2017-01-25 10:55:10
【问题描述】:

我一直致力于将一个巨大的项目分解成小部分,为每个部分创建一个包 (dpk),并将应用程序配置为“使用运行时包”。我在链接其中一个使用其他包的包时遇到问题。链接时间太长了。

我的印象是,当一个包 (A) 需要另一个包 (B) 时,该依赖关系仅在运行时解决,但显然并非完全如此,因为如果从“需要”中删除 (B) (A)、(A) 部分的链接在正常时间内完成,否则需要 30 分钟或更长时间。

所以我的问题是,当 Delphi 链接一个需要另一个包的包时究竟会发生什么?

【问题讨论】:

  • 除非你想使用可选的插件模块,否则使用运行时包几乎肯定会让你的生活变得更加艰难。
  • 我们使用 XE3,现在我们几乎无法构建项目。通常情况下,IDE 会崩溃或发出“内存不足”错误。很久以前我们决定将项目分成几个部分,我们称之为“commonfeature.*”,但不是使用 dpks,每个部分实际上是一个 exe,将 dcus 吐到一个我们命名为“_codelink”的公共文件夹中,从这一点开始在任何需要“commonfeature”中的东西的项目上,只需使用“_codelink”中的 dcu。这种方法的问题在于,我们最初认为问题在于编译部分,但事实证明,问题在于链接部分。
  • 是的,这是一个公平的打击。大约是我正在使用的 5 倍。我可以看到编译器可能会遇到困难。也许我没有合适的经验给你建议。
  • 我肯定会考虑在一个 exe 和一组 DLL 中分解应用程序,每个 DLL 都有一个特定的任务/目的,可选的 COM/ActiveX 用于接口/加载/描述对象。
  • 也许 IDE Fix Pack (andy.jgknet.de/blog/ide-tools/ide-fix-pack) 可能会对您有所帮助。我记得过去从 Andy 的网站上获得了一些有助于加快编译和/或链接的内容。

标签: delphi linker packages delphi-xe3 delphi-10.1-berlin


【解决方案1】:

在链接包时,无论是运行时还是设计时,都需要解决链接对象中的所有依赖关系。与运行时包的唯一区别是它们是在运行时加载的,因此它们最终可以减少重用公共元素的可执行文件(或可执行文件套件)的大小。但是,链接行为保持不变,因此如果链接是您构建中的瓶颈,那么如果您从使用 DCU 切换到运行时包,这将不会改变。

如果链接您的应用程序的瓶颈,那么您可以利用一些架构重构策略来简化构建,但这是一个超出本答案范围的广泛主题。

【讨论】:

    猜你喜欢
    • 2012-12-17
    • 2013-02-26
    • 2013-02-23
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-22
    • 2011-12-31
    • 2010-09-26
    相关资源
    最近更新 更多