What is a runtime library? I have read this and thereby I do have a decent understanding about its purpose, but is it a file? Is it something that you can include explicitly like the standard library?
答案 0 :(得分:2)
最重要的是,它是概念:在目标平台上提供语言功能所需的代码。
即。它是strlen
和feclearexcept
以及ofstream::operator<<
语言提供的所有其他标准库函数的实现。
它也可能包含“粘合代码”,例如确保在程序启动时使用正确的参数调用“main”,以及与目标操作系统的其他交互。
与许多概念一样,它具有不同的“物理”表现(与文件一样物理)。它们取决于语言的实现细节,但通常是:
编译期间可用的头文件,包含内联实现(例如标准模板库)
静态库(.obj或.lib)文件,包含已编译的函数,并在链接期间包含在您的可执行文件中。
执行期间需要提供的动态库(.dll或.so)文件
“创建可执行文件时编译器或链接器执行的特殊操作”
典型的C ++程序可能会看到“以上所有内容”。
静态库通常是使用C,C ++或汇编代码创建的,它们实现标准库函数,通常使用目标操作系统的功能(例如,用于fstream的Windows CreateFile
)
动态库将这些静态库(大部分)打包为.dll或.so。
使用动态库需要在目标平台上安装相应的运行时,但使用它们可以减少可执行文件的大小,并且已经安装的应用程序可以从运行时更新中获益。
如上所述,这是依赖于实现的。可能存在与运行时关联并包含在运行时中的任意数量的附加文件(例如数据文件,配置文件,调试符号,图标等)。
这里的另一个重要方面是:语言提供了目标平台的抽象,抽象层是在运行时实现的。
答案 1 :(得分:1)
有静态和动态(运行时)库。
静态库中的代码在编译时放入可执行文件中(链接器执行此操作)。所以这段代码可能会破坏你的可执行文件,但它在每台计算机上都是相同的代码。
当您使用动态库(Windows中的.dll,Linux中的.so)时,该函数仅作为存储的链接(从ABC.dll调用XYZ())。执行二进制文件时,操作系统会将库加载到可执行文件的地址空间中并解析链接。因此,您的可执行文件更小,并且许多程序可以使用该库。当这个库中存在错误时,每个程序只需更换一次。但这只有作用,如果图书馆的界面只是小心改变,否则 - 欢迎来到DLL地狱。