运行时依赖项和生成依赖项概念
Runtime dependency and build dependency concepts
我一直听说过构建依赖/运行时依赖。它们是不言自明的术语。据我了解,构建依赖项用于编译时所需的组件。例如,如果 A 与 B 具有生成依赖关系,则 A 无法在没有 B 的情况下生成。如果 A 与 B 具有运行时依赖关系,则可以在没有 B 的情况下构建 A,但在没有 B 的情况下无法运行。
然而,这些信息太浅了。我想更好地阅读和理解这些概念。我一直在谷歌搜索,但找不到来源,你能给我一个链接或正确的关键字来搜索吗?
我将尽量保持简单和理论性。
当你编写调用函数"func"的代码时,编译器需要你的函数描述符(例如"int func(char c);",通常在.h文件中可用)来验证参数的正确性,链接器需要你的函数实现(你的实际代码所在的位置)。
操作系统提供了将函数实现分离到不同编译模块中的机制。通常需要
- 更好的代码重用(多个应用程序可以使用相同的代码,具有不同的数据上下文)
- 更高效的编译(不需要重新编译所有依赖项库)
- 部分升级
- 分发已编译的库,而不公开源代码
为了支持这样的功能,编译器像往常一样提供了函数描述符(.h文件)。虽然链接器提供了包含函数存根的库文件。操作系统负责在应用程序加载过程中加载实际的实现文件(如果尚未为不同的应用程序加载),并将实际函数映射到新应用程序的内存中。
动态加载功能也扩展到面向对象的语言(C++,C#,Java等)
实际实现取决于操作系统 - 动态链接在Windows中实现为DLL文件或在Linux中实现为SO文件
特殊的操作系统相关技术可用于在使用相同动态库的不同应用程序之间共享上下文(变量、对象)。
梅厄·策特林
相关文章:
- CMake-按正确顺序将项目与C运行时对象文件链接
- 我在c++代码中生成了一个运行时#3异常
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- 删除指向指针的指针是运行时错误吗
- 如何用参数值调用函数(仅在运行时已知)
- 为什么即使使用-cudart-static进行编译,库用户仍然需要链接到cuda运行时
- 是否可以在编译时初始化数组,以便在运行时不会花费时间?
- c++中的指针和运行时错误
- 模型依赖关系目标,在运行时链接
- 如何在 Linux 上将所有第三方运行时依赖项包含在 cmake/cpack 生成的包中
- 使用运行时dll(/MD)避免与dll的运行时依赖关系
- Visual Studio 2015 运行时依赖项或如何摆脱通用 CRT
- 运行时的库依赖项
- c++中的运行时模板依赖
- 动态加载的PIC共享库具有来自NPIC依赖项的运行时未解析符号
- Windows运行时库依赖和纯C代码
- 如何使Visual Studio 2010不包含对MSVC运行时引擎的任何依赖项
- 在运行时检测应用程序的所有依赖项
- 运行时依赖项和生成依赖项概念
- 在运行时检测和拦截链接库依赖项