2017-10-12 60 views
4

什么是运行时库?我已阅读this,因此我对它的目的有一个正确的理解,但是它是一个文件吗?它是否可以像标准库一样明确包含?具体是什么运行时库?

+0

@ user0042感谢您的输入,但是它是如何显示实际运行时库的?就像您可以自己阅读的物理文件一样,包括等等...... – Rocket

+0

正如我所说的,我已经阅读了有关该术语的内容。我只是喜欢他们的一些例子。 – Rocket

+0

运行时库是代码(函数等)的集合,用户程序(例如,您编写的程序)需要它们才能正常工作。例如,在调用main()函数之前执行的C++标准库和代码通常是运行时库的一部分 - 大多数C++程序在没有它的情况下无法做任何有用的事情。运行时库可能是一个单独的可执行文件(例如,您的程序无法运行的Windows DLL窗口),或者链接器可能会在编译时直接将代码复制到可执行文件中,以便程序运行“独立”或这些组合。可能性继续 – Peter

回答

1

有静态和动态(运行时)库。

来自静态库的代码在编译时放入可执行文件中(链接器执行此操作)。所以这段代码可能会膨胀你的可执行文件,但它在每台计算机上都有相同的代码。

当您使用动态库(Windows中的.dll,Linux中的.so)时,该函数仅作为链接存储(从ABC.dll调用XYZ())。在执行二进制文件时,操作系统将这些库加载到可执行文件的地址空间中并解析链接。所以你的可执行文件比较小,这个库可以被许多程序使用。当这个库存在缺陷时,每个程序只能替换一次。但是,这只适用于如果库的接口只是小心改变,否则 - 欢迎来到DLL地狱。

2

首先,它是概念:在目标平台上提供语言功能所需的代码。

即它是执行strlenfeclearexceptofstream::operator<<所有其他标准库函数的语言可用。

它也可能包含“胶水代码”,例如确保您的'main'在程序启动时被正确的参数调用,以及与目标OS的其他交互。


像许多概念,它有不同的“物理”表现(物理作为一个文件即可)。他们依赖于语言的实现细节,但常见的有:编译时可用

  • 头文件,包含内嵌的实现(如标准模板Libary)

  • 静态库(.OBJ或.LIB )文件,包含已编译的函数,并在链接期间包含在可执行文件中。

  • 动态库文件(.dll或.so)需要在执行过程中可用的文件

  • “特殊的东西编译器或链接做”创建可执行

一个典型的C++时程序可能会看到“所有上述”。

静态库通常由C,C++或实现标准库函数,其通常使用目标OS的fucntionality(例如,Windows CreateFile为fstreams)

的动态库程序包(的大型工件装配代码创建)这些静态库作为.dll或.so。

使用动态库需要相应的运行要在目标平台上安装,但使用起来也减少了你的可执行文件,并从更新到您的运行时已安装的应用效益的大小。


如上所述,这是实现依赖。可能有任何数量的附加文件(例如数据文件,配置文件,调试符号,图标等)与运行时相关联和包含在运行时中。

这里的另一个重要方面是:语言提供了目标平台的抽象,抽象层是在运行时实现的。