Dig a little deeper. cl /c /Fohello1.obj hello.c
ml /c /Fohello2.obj hello.asm
For these two objs, linking hello1.obj ok but hello2.obj gives error "one or more multiply defined symbols found". But I can't find the actual difference between the two objs 🙁
Dump of file hello1.obj
File Type: COFF OBJECT
COFF SYMBOL TABLE
000 01045E97 ABS notype Static | @comp.id
001 80000191 ABS notype Static | @feat.00
002 00000000 SECT1 notype Static | .drectve
Section length 2F, #relocs 0, #linenums 0, checksum 0
004 00000000 SECT2 notype Static | .debug$S
Section length 74, #relocs 0, #linenums 0, checksum 0
006 00000000 SECT3 notype Static | .data
Section length E, #relocs 0, #linenums 0, checksum 2D04EA8
008 00000000 SECT3 notype Static | $SG4501
009 00000000 SECT4 notype Static | .text$mn
Section length 14, #relocs 2, #linenums 0, checksum F829D91C
00B 00000000 SECT5 notype Static | .text$mn
Section length A, #relocs 1, #linenums 0, checksum 71A05264, selection 2 (pick any)
00D 00000000 SECT6 notype Static | .text$mn
Section length 29, #relocs 2, #linenums 0, checksum 2B25B17F, selection 2 (pick any)
00F 00000000 SECT7 notype Static | .text$mn
Section length 3A, #relocs 2, #linenums 0, checksum CAE6D625, selection 2 (pick any)
011 00000000 SECT5 notype () External | ___local_stdio_printf_options
012 00000000 UNDEF notype () External | ___acrt_iob_func
013 00000000 UNDEF notype () External | ___stdio_common_vfprintf
014 00000000 SECT6 notype () External | __vfprintf_l
015 00000000 SECT7 notype () External | _printf
016 00000000 SECT4 notype () External | _main
017 00000008 UNDEF notype External | ?_OptionsStorage@?1??__local_stdio_printf_options@@9@9 (`__local_stdio_printf_options'::`2'::_OptionsStorage)