同样的一段 Hello Word 的 C ,
#include <stdio.h>
int main(){
printf("Hello World\n");
return 0;
}
用 TDM-GCC 和 MING-W64 版本 gcc 同样编译出来 32 位的 exe ,为什么一个是 50kb ,一个是 28kb ,大出来的是干嘛的?
截图:
第一个是 64 位的,编译出来 130KB ,第 2 、 3 个都是 32 位的,为何编译出来大小差小一倍
程序信息截图,都是 32 位的:
4 个文件打包下载:
1
owt5008137 2016-12-03 16:20:26 +08:00 via Android
gcc -V
编译选项不一样的地方就是原因了哇 当然还有那几个依赖库的版本和编译选项的原因 |
2
wwqgtxx 2016-12-03 16:20:40 +08:00
应该和他们自带的标准库有关吧,毕竟这两个 GCC 都是把标准库静态编译进去的
|
3
JiaFeiX OP mingw64 32 位 GCC 参数是:
~~~ C:\PRO_DEV\mingw-w64\mingw32\bin>gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=C:/PRO_DEV/mingw-w64/mingw32/bin/../libexec/gcc/i686-w64-min gw32/6.2.0/lto-wrapper.exe Target: i686-w64-mingw32 Configured with: ../../../src/gcc-6.2.0/configure --host=i686-w64-mingw32 --buil d=i686-w64-mingw32 --target=i686-w64-mingw32 --prefix=/mingw32 --with-sysroot=/c /mingw620/i686-620-posix-dwarf-rt_v5-rev1/mingw32 --enable-shared --enable-stati c --disable-multilib --enable-languages=c,c++,fortran,lto --enable-libstdcxx-tim e=yes --enable-threads=posix --enable-libgomp --enable-libatomic --enable-lto -- enable-graphite --enable-checking=release --enable-fully-dynamic-string --enable -version-specific-runtime-libs --enable-libstdcxx-filesystem-ts=yes --disable-sj lj-exceptions --with-dwarf2 --disable-isl-version-check --disable-libstdcxx-pch --disable-libstdcxx-debug --enable-bootstrap --disable-rpath --disable-win32-reg istry --disable-nls --disable-werror --disable-symvers --with-gnu-as --with-gnu- ld --with-arch=i686 --with-tune=generic --with-libiconv --with-system-zlib --wit h-gmp=/c/mingw620/prerequisites/i686-w64-mingw32-static --with-mpfr=/c/mingw620/ prerequisites/i686-w64-mingw32-static --with-mpc=/c/mingw620/prerequisites/i686- w64-mingw32-static --with-isl=/c/mingw620/prerequisites/i686-w64-mingw32-static --with-pkgversion='i686-posix-dwarf-rev1, Built by MinGW-W64 project' --with-bug url=http://sourceforge.net/projects/mingw-w64 CFLAGS='-O2 -pipe -I/c/mingw620/i6 86-620-posix-dwarf-rt_v5-rev1/mingw32/opt/include -I/c/mingw620/prerequisites/i6 86-zlib-static/include -I/c/mingw620/prerequisites/i686-w64-mingw32-static/inclu de' CXXFLAGS='-O2 -pipe -I/c/mingw620/i686-620-posix-dwarf-rt_v5-rev1/mingw32/op t/include -I/c/mingw620/prerequisites/i686-zlib-static/include -I/c/mingw620/pre requisites/i686-w64-mingw32-static/include' CPPFLAGS= LDFLAGS='-pipe -L/c/mingw6 20/i686-620-posix-dwarf-rt_v5-rev1/mingw32/opt/lib -L/c/mingw620/prerequisites/i 686-zlib-static/lib -L/c/mingw620/prerequisites/i686-w64-mingw32-static/lib -Wl, --large-address-aware' Thread model: posix gcc version 6.2.0 (i686-posix-dwarf-rev1, Built by MinGW-W64 project) ~~~ TDM gcc 32 位参数为: ~~~ C:\PRO_DEV\TDM-GCC-32\bin>gcc -v Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=C:/PRO_DEV/TDM-GCC-32/bin/../libexec/gcc/mingw32/5.1.0/lto-w rapper.exe Target: mingw32 Configured with: ../../../src/gcc-5.1.0/configure --build=mingw32 --enable-langu ages=ada,c,c++,fortran,lto,objc,obj-c++ --enable-libgomp --enable-lto --enable-g raphite --enable-libstdcxx-debug --enable-threads=posix --enable-version-specifi c-runtime-libs --enable-fully-dynamic-string --enable-libstdcxx-threads --enable -libstdcxx-time --with-gnu-ld --disable-werror --disable-nls --disable-win32-reg istry --disable-symvers --enable-cxx-flags='-fno-function-sections -fno-data-sec tions -DWINPTHREAD_STATIC' --prefix=/mingw32tdm --with-local-prefix=/mingw32tdm --with-pkgversion=tdm-1 --enable-sjlj-exceptions --with-bugurl=http://tdm-gcc.td ragon.net/bugs Thread model: posix gcc version 5.1.0 (tdm-1) ~~~ @owt5008137 @wwqgtxx |
4
canfoderiskii 2016-12-03 16:37:53 +08:00 via Android
问个题外的问题: tdm 版本的 gcc 还有必要使用么?我几乎没用过,因为没看到有必须使用它的地方
|
5
JiaFeiX OP @canfoderiskii 直接使用官方 gcc 版本?
|
6
canfoderiskii 2016-12-03 16:52:35 +08:00 via Android
@JiaFeiX 我用的 msys2 ,包含 mingw32, mingw64, msys 三种环境, pacman 包管理器。包更新也很及时。 GCC 当然也被包含在里面。
|
7
wwqgtxx 2016-12-03 16:54:57 +08:00 via iPhone
我都说了,他们两个用的 libc 不一定一样,不一定编译参数一样, libc 的版本就一样呀
|
8
canfoderiskii 2016-12-03 17:03:33 +08:00 via Android
@JiaFeiX 看了-v 的输出,两个 gcc 版本自身就差异很大,我猜除了 c 库的不同,高版本 gcc 可能会生成质量更高的代码。瞎猜
|
9
missdeer 2016-12-03 18:20:52 +08:00 via Android
差一个大版本,这怎么比较
|
10
sagaxu 2016-12-03 20:46:42 +08:00
strip -s 剔除掉不必要的东西再比较大小
|