为什么可执行文件比与应用程序项目静态链接的库小?

问题描述:

我已经在visual studio中创建了windows应用程序项目。 OpenSSL库(大小:15Mb)与应用程序项目静态链接。为什么可执行文件比与应用程序项目静态链接的库小?

但是,应用程序(可执行文件).exe文件的大小只有〜2 MB。

这怎么可能? 任何人都可以解释我如何链接器做到这一点?

在链接期间,链接器将只从您的应用程序需要的OpenSSL库中选取代码。它不会包含整个OpenSSL库。因此,您的可执行文件可能比库更小。

基本上,静态库只是一个对象文件的容器。每个目标文件都包含单个编译单元的代码。

+2

*每个目标文件都包含单个函数的代码*严格来说,并非如此,通常每个目标文件都是编译单个翻译单元(即.c/.cpp文件)的结果。 –

+1

这就是静态库如何在我知道的任何平台上工作... –

+2

@MatteoItalia:感谢您指出*每个对象中的错误... *。我相应地更新了我的答案。 – Codo