c - Microsoft 编译器和 GNU 编译器在输出可执行文件大小方面的差异

标签 c compiler-construction executable exe elf

假设我有以下程序:

#include <stdio.h>
int main()
{
    printf("This is a sample C program.\n");
    return 0;
}

如果我在 Windows 7 32 位计算机上使用 Microsoft 编译器 (cl.exe/O1 example.c) 对其进行编译,则会输出一个 44 KB 的可执行文件。

如果我在 CentOS 64 位机器上使用 GNU 编译器 (gcc example.c) 编译它,那么它会输出一个 6 KB 的可执行文件。

一般来说,为什么这个小程序的文件大小差别这么大?为什么仅打印一行并退出 Windows 就需要 44 KB?

最佳答案

如果您将/MD 开关与 cl.exe 结合使用,它将动态链接到 msvcrt(Microsoft C 运行时库)并使用 msvcrt.dll(您将获得 6KB 的可比可执行文件大小),否则代码C 库中的静态链接到您的可执行文件中,从而增加了可执行文件的大小。

默认情况下,CentOS 上的 gcc 编译器设置为动态链接 C 库。

关于c - Microsoft 编译器和 GNU 编译器在输出可执行文件大小方面的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579145/

相关文章:

c - 从文件读取并存储到C中的二维数组中

compiler-construction - LLVM 中用于 C++ 输入的 FunctionPass

Spring Boot可执行jar结构

c - 二叉搜索树算法返回一个范围内的值数组

c - 返回值赋值时的错误消息

c - 在 C 中获取 "conflicting types for function",为什么?

c - 为什么动态二进制翻译比静态二进制翻译更实用?

c++ - 程序的运行速度与Debug模式或Release模式有关吗?

c++ - 如何在C++中并行执行系统命令

.net - 控制台应用程序不会在构建时生成可执行文件