当我们创建静态库时,我们必须为客户端提供2个文件:
但是,当我们创建动态库时,我们必须为客户端提供3个文件:
据我所知,我无法构建
的客户端应用程序(例如控制台应用程序)当我按如下方式构建一个简单的控制台应用程序时,例如:
#include <iostream>
int main()
{
std::cout << "Hello World!";
return 0;
}
输出(本例中为.exe文件)是自包含的。 这是否意味着“所有c ++标准库都是静态库”?
答案 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,而是存在于目标计算机上。因此,这是我个人的偏好。后者使你的程序变小。