c ++标准库是静态库吗?

时间:2018-05-04 04:36:55

标签: c++

当我们创建静态库时,我们必须为客户端提供2个文件:

  • .h文件
  • .lib文件

但是,当我们创建动态库时,我们必须为客户端提供3个文件:

  • .h文件
  • .lib文件(又名导入文件)
  • .dll files

据我所知,我无法构建

的客户端应用程序(例如控制台应用程序)
  • 静态链接动态库
  • 动态链接静态库

问题

当我按如下方式构建一个简单的控制台应用程序时,例如:

#include <iostream>

int main()
{
    std::cout << "Hello World!";

    return 0;
}

输出(本例中为.exe文件)是自包含的。 这是否意味着“所有c ++标准库都是静态库”?

2 个答案:

答案 0 :(得分:1)

  

输出(本例中为.exe文件)是自包含的。这是否意味着&#34;所有c ++标准库都是静态库&#34; ?

没有。否。

当我在Linux上的一个简单的C ++程序上执行ldd时,我得到了。

linux-vdso.so.1 =>  (0x00007ffc125f2000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f6e371b2000)
/lib64/ld-linux-x86-64.so.2 (0x00007f6e3757c000)

这意味着,除非您拥有这些动态库,否则可执行文件不会运行。

您将在Windows上找到类似的依赖项。

答案 1 :(得分:1)

在Windows上,至少使用Visual Studio构建时,您可以选择是否链接到静态(.lib)或动态(.dll)运行时库。您可以在某个项目设置中选择此项。

前者使您的.exe更具可移植性,因为它不依赖于您链接的运行时库版本的DLL,而是存在于目标计算机上。因此,这是我个人的偏好。后者使你的程序变小。