Windows ld链接器';s输出可执行文件比golink输出可执行文件大,为什么?

Windows ld链接器';s输出可执行文件比golink输出可执行文件大,为什么?,windows,assembly,linker,nasm,ld,Windows,Assembly,Linker,Nasm,Ld,我用nasm组装了一个简单的代码,并用ld和golink链接了输出obj文件 问题是 golink输出可执行文件的大小为2kb 但是 ld输出可执行文件的大小为85kb 我使用的是mingw32,两者都使用库kernel32.dll 链接命令包括: golink /entry _start /console test.obj kernel32.dll & 那么,为什么尺寸会有如此巨大的差异呢 我做错什么了吗?你能告诉我吗 要使用GCC达到2KB的可执行文件大小,请运行以下命令: gcc tes

我用
nasm
组装了一个简单的代码,并用
ld
golink
链接了输出obj文件 问题是 golink输出可执行文件的大小为
2kb
但是 ld输出可执行文件的大小为
85kb

我使用的是mingw32,两者都使用库
kernel32.dll

链接命令包括:

golink /entry _start /console test.obj kernel32.dll
&

那么,为什么尺寸会有如此巨大的差异呢


我做错什么了吗?你能告诉我吗

要使用GCC达到2KB的可执行文件大小,请运行以下命令:

gcc test.obj -nostartfiles -s

默认情况下,与GoLink链接器相比,GCC在可执行文件中包含更多数据。一个简单的
gcc
命令包含一个符号表、重定位信息和一些其他引用。我们使用
-s
标志删除符号表和重定位信息,并使用
-nostartfiles
标志停止使用标准系统启动文件(参考其他内容)。

您可能正在链接C库,请尝试
gcc-nostlib
。使用-nostlib选项,文件大小降至5.02kb。。。但是使用-nostlib选项,我可以使用像_printf这样的函数吗?像_printf这样的函数是C标准库的一部分,如果不链接到C标准库,就不可能使用它们。
gcc test.obj -nostartfiles -s