C ++库如何工作?

时间:2014-08-24 10:27:58

标签: c++ compiler-construction header

据我所知,Windows操作系统使用汇编语言与硬件进行交互。 当他们这样做时,他们可以使用c,c ++或任何其他语言来完成其他工作。

据我所知,C ++头文件实际上是为实现调用windows api。

那么头文件位于何处?它们是由编译器安装的吗?或者他们带有操作系统?

头文件用什么关键字或代码与sutable api交互(例如windows上的std :: cout,调用dll文件中的函数和linux中的函数)?

例如iostream.h在linux上与windows不同吗?

他们如何找到合适的图书馆?

我的最后一个问题是,库如何与汇编代码交互?(因此汇编代码与硬件交互)

TIA。

2 个答案:

答案 0 :(得分:1)

以下段落并不是对图书馆,编辑过程或系统调用如何工作的任何形式的完整描述,而是对OP提出的要求的鸟瞰图,因此缺少一些细节和重要的段落,必须由OP本人深入研究

通过" C ++库"我假设您指的是C++ standard library(尽管此处的注意事项也适用于任何其他库)。

默认情况下,C ++标准库并不强制存在于任何操作系统上,它通常随附编译器安装或辅助包。这并不意味着你不能执行C ++编译的例程,你只需要头文件和库来编译你的程序以及支持它的编译器。

C ++标准库通常是针对特定于平台编译的,您只能将头文件和lib文件从一个操作系统复制到另一个操作系统(您最终会流泪)。

每次从头文件中导入类似

的声明
#include <iostream>

您使程序了解标准库提供的数据结构,函数和类的宏。您可以根据需要使用它们,只要您提供通常定义例程代码的.lib文件(在Windows环境中)(在Visual Studio中,这通常称为带有/MT /MD选项的运行时库)linking

一旦你将可执行文件与那些.lib文件链接起来,就会有一个已编译的可执行文件,在反汇编程序中打开,可能会有类似的东西(对于一个简单的hello world,代码段from here - 而不是windows环境)

mov     edx,len                             ;message length
mov     ecx,msg                             ;message to write
mov     ebx,1                               ;file descriptor (stdout)
mov     eax,4                               ;system call number (sys_write)
int     0x80                                ;call kernel
因此,最终标准库提供的每个C ++函数或例程都实现了算法和/或最终通过System Calls调用一些特定于操作系统的例程。除了用于安全检查的数千层(更不用说ring3 / ring0交换机)之外,各种操作系统(甚至系统调用点的边界)之间存在一些设计和实现差异,因此我不会花费关于这一点的更多话语。

答案 1 :(得分:0)

您可以尝试安装Windows SDK并检查%PROGRAMFILES%\Microsoft SDKs\Windows目录。