???????Visual C++??????????????LNK2005:symbol already defined??LNK1169:one or more multiply defined symbols found??????????????????????????????????????????????????????е??????????????????е??????????????????????????????????????????????????????????
???????????????C/C++?????????????????????????:(1)???????????????????????????????(assembler)??????????? (???????????????)??????????????????(object file??VC??????????????????????????????.obj)?У?(2)??????(linker)???????????????(????????????????)???????????????????????????????
??????????????????????????????????(global symbol)????(strong)????(weak)?????????????????????????????????????????????????????С??????ν??????????????????????????????????????????????δ????????????????????????????????????????:
????extern int errorno;
????int buf[2] = {1??2};
????int *p;
????int main()
????{
????return 0;
????}
????????main??buf????????p???????????errorno????????????????????????????????????
???????????????????????????????????????δ??????????ζ????????????:
????????1: ??????????????ζ???(??????????????в???????????????)??
????????2: ?????????????????????????????????????????ж??????????????????????
????????3: ???????????????????????ж?????????????????????????????
?????????????????????????????????????????????????????????????????LNK2005??LNK1169?????????????????е???????????????????????з??????????????????????????????????????????ν????????????е?????????????????????
?????????????ANSI C/C++ ????????????????????????????????????????????У?????????????????????????????????????????????е???????????????????????????У????????????????????????????????????????????????????????????????????????C?????????????????????????????????????????????????(static library)???????????????????????????????????????????????????????????Щ??ó???????????????飬????(?????)???????п??????????????????????????????е?C/C++???????????????????????????????????????(?в??????????)??
????????????????????????????????Щ?????????????????????????????ν???(resolve)?????????????
????????????(symbol resolution)??Σ????????????????????????????????????????е???????????????????????????????????????????:(1)????E????????????????????????????????????????(2)????U??δ????????(unresolved symbols???????????????????δ??????????)??????(3)????D???????????????E??????????????????????????E??U??D???????
????(1): ?????????е????????????f????????????????????????????????????????????????f????E??????f??δ????????????????????????U??D?????У????????????????????
????(2): ???f???????????????????????U?е?????δ??????????f?и??????鶨????????????????????????m?????????U?е?δ?????????????? m????E?У?????m??δ????????????????????????U??D?????С???????f?е?????????????????????????????????????(fixed point)?????U??D????仯??????Щδ????E?е?f????????鱻???????????????????????????????????
????(3): ??????????????D???????????????????????????????????????U???????????????????????????????E?е????????????????????????????????
????VC??????????????cl.exe???????????????????????й?????: /ML??/MLd??/MT??/MTd??/MD??/MDd????Щ?????????????ó???????????汾??C????????/ML(?????)????????????????????(libc.lib)??/MT????????????????(libcmt.lib)????????????????????_MT??/MD????????DLL?? (?????msvcrt.lib??DLL??msvcrt.dll)???????????????_MT??_DLL???????????d???????????????????????? _DEBUG????????????????????棬???/MLd???????浥??????????(libcd.lib)??/MTd??????????????????? (libcmtd.lib)??/MDd????????????DLL?????(?????msvcrtd.lib??DLL??msvcrtd.dll)??????????????????????????????????????ó????????????汾????????????????????????????????????????????ε???????????????????????????????????????????????????????????????cl??????????????л??????????????(??????????????????????????????????ο?COFF?? PE??????)????Щ???????????ι????????????????????????(default library)????Щ?????????????????????????????????????????????????????????????б???(??????λ???????????б????????????????)?????????????????????С??顣д???????????????????main.c :
????/* main.c */
????int main() { return 0; }
????????????????????main.c(????????????????????????????......) :
????cl /c main.c

????/c ?????cl???????????????????????/ML????????????????????????: cl /c /ML main.c ??????????????(????????????????????????????????????????ú???????????VC??bin???????vcvars32.bat??????????????)????????????????main.obj????????????????????????????????????????????(????????????????????????)??????"defaultlib"????????????????????????: "-defaultlib:LIBC -defaultlib:OLDNAMES"??????????????
??????????????????е??????????????????????????????????????????????????????libc.lib(????/ML??????)???????????oldnames.lib(??????????????????C/C++??????)??
????VC??????????link.exe?????main.obj????????????????????????
????link main.obj libc.lib
????????
????link main.obj
?????????????????main.exe?????????????????????????????
????link main.obj libcd.lib
???????????????????????????: "warning LNK4098: defaultlib "LIBC" conflicts with use of other libs; use /NODEFAULTLIB:library"???????????????????汾?????????????????????????????????????????????????????????????????汾??£?????????????????????????棬??LNK2005??LNK1169???????????????????????????????????????????????????????????????????????????????????????