【问题标题】:Runtime dependency and build dependency concepts运行时依赖和构建依赖概念
【发布时间】:2015-06-15 21:09:36
【问题描述】:

我听说过构建依赖/运行时依赖。它们是不言自明的术语。据我了解,构建依赖项用于编译时所需的组件。例如,如果 A 对 B 有构建依赖项,则没有 B 就无法构建 A。另一方面,运行时依赖项是动态的。如果 A 对 B 有运行时依赖关系,则 A 可以在没有 B 的情况下构建,但不能在没有 B 的情况下运行。
然而,这个信息太浅了。我想更好地阅读和理解这些概念。我一直在谷歌上搜索,但找不到来源,你能提供一个链接或正确的关键字来搜索吗?

【问题讨论】:

标签: c++ dependencies


【解决方案1】:

我会尽量保持它的简单性和理论性。

当您编写调用函数“func”的代码时,编译器需要您的函数描述符(例如“int func(char c);”通常在 .h 文件中可用)来验证参数的正确性,而链接器需要您的函数实现(您的实际代码驻留)。

操作系统提供将功能实现分离到不同编译模块的机制。通常需要

  1. 更好的代码重用(多个应用程序可以使用相同的代码,具有不同的数据上下文)
  2. 更高效的编译(不需要重新编译所有依赖库)
  3. 部分升级
  4. 分发已编译的库,但不透露源代码

为了支持这样的功能,编译器像往常一样提供了函数描述符(.h 文件)。虽然链接器提供了包含函数存根的 lib 文件。操作系统负责在应用程序加载过程中加载一个实际的实现文件(如果尚未为不同的应用程序加载),并将实际功能映射到新应用程序的内存中。

动态加载功能也针对面向对象的语言(C++、C#、Java 等)进行了扩展

实际实现取决于操作系统 - 动态链接在 Windows 中被实现为 DLL 文件,在 Linux 中被实现为 SO 文件

特殊的操作系统相关技术可用于在使用相同动态库的不同应用程序之间共享上下文(变量、对象)。

梅厄·赛特林

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-06-30
    • 2019-03-06
    • 1970-01-01
    • 2015-08-28
    • 2011-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多