编译器库与操作系统库

Dav*_*ett 13 c++ mingw windows-8

我注意到我的编译器(MinGW)和Windows 8 SDK都带有相同的库,保存了命名约定(即win32.lib在Windows 8 SDK上libwin32.a的MinGW库中).

  • 所有编译器都带有这些库吗?
  • 这些库是否适用于多种操作系统?
  • Windows 8 SDK附带的库与编译器附带的库之间有什么区别(如果有的话)?

Meh*_*dad 7

有两种库:

  • 导入库:
    这些库仅列出查找变量/函数/等的引用的位置,但它们不包含代码本身.

  • "普通"库(包含包含机器代码的目标文件):
    这些库包含目标文件,其中包含实际的机器代码.

随操作系统一起提供的库通常是导入库.
毕竟,实际的代码是在操作系统本身; 导入库只是告诉您如何使用操作系统中提供的代码.
为什么这有必要?因为程序在运行无法"发现"操作系统上可用的库,所以程序必须知道编译时可用的库.

编译器附带的通常是代码库; 它们包含编译器所需的代码(具体取决于您的特定编译器),以便完善您的程序.

但是,库没有单一的"标准格式"; Microsoft使用COFF,但*nix工具使用ELF.
因此,当微软为系统提供导入库时,它只会以COFF格式发送它们,这对于Visual C++编译器来说非常有用 - 但对其他编译器却没那么有用.

这导致像MinGW这样的编译器供应商被迫为他们想要定位的操作系统创建自己导入库 - 这些库的目的与操作系统供应商(如Microsoft)提供的库完全相同. ,但他们的格式不同.

这就是为什么你看到以多种方式提供看似相似的库的原因.