gpt4 book ai didi

c - MinGW gcc 与 linux gcc 可执行文件大小

转载 作者:行者123 更新时间:2023-12-02 02:36:29 26 4
gpt4 key购买 nike

我写了这个小C程序

#include <stdio.h>

int main() {
int i = 0;
while (i < 10){
printf("%i", i);
i++;
}

}

如果我用 MinGW gcc 编译它,可执行文件是 59kb,但是如果我用 linux gcc 通过 Windows shell 上的 ubuntu 编译它,可执行文件只有 9kb。 50kb 看起来像是很多额外的数据......这是为什么?

最佳答案

根据 MinGW wiki,调试信息可以包含在与可执行文件链接的库中。您可以使用 gcc“-s”选项或“strip”命令从可执行文件中排除调试信息。

对“Gnu 风格”或“MS 风格”printf 格式的支持似乎是 MinGW stdio 和 GNU C 库 stdio 之间的区别之一。

<小时/>

MinGW

#>  gcc --version
gcc.exe (GCC) 5.3.0

#> gcc -o printf_gcc_mingw.exe printf.c
#> gcc -s -o printf_gcc_strip_mingw.exe printf.c
#> du -ch *.exe
59K printf_gcc_mingw.exe
45K printf_gcc_strip_mingw.exe

MinGW-w64

#>  gcc -o printf_gcc.exe printf.c
#> gcc -s -o printf_gcc_strip.exe printf.c
#> gcc --version
gcc (tdm64-1) 5.1.0
#> dir *.exe
132,613 printf_gcc.exe
16,896 printf_gcc_strip.exe
#>objdump -x printf_gcc_strip.exe
DLL Name: msvcrt.dll
vma: Hint/Ord Member-Name Bound-To
85ca 55 __C_specific_handler
85e2 78 __dllonexit
85f0 81 __getmainargs
8600 82 __initenv
860c 83 __iob_func
861a 91 __lconv_init
862a 97 __set_app_type
863c 99 __setusermatherr
8650 116 _acmdln
865a 123 _amsg_exit
8668 141 _cexit
8672 252 _fmode
867c 330 _initterm
8688 438 _lock
8690 610 _onexit
869a 820 _unlock
86a4 1031 abort
86ac 1049 calloc
86b6 1062 exit
86be 1081 fprintf
86c8 1088 free
86d0 1099 fwrite
86da 1146 malloc
86e4 1154 memcpy
86ee 1163 printf
86f8 1184 signal
8702 1205 strlen
870c 1208 strncmp
8716 1240 vfprintf

Visual Studio 2015

#>  cl /MD printf.c /link  /out:printf_vs.exe
#> dir *.exe
9,728 printf_vs.exe

#>printf_vs.exe
0123456789

关于c - MinGW gcc 与 linux gcc 可执行文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40440504/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com