解决外部符号错误:_main,_WinMain@16,__beginthreadex !-N!Bt8;
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有柚煤孟钅坎问? 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有: {=/Fc`74
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main Q-!gO
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 c_CVZR?
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 $qr6LIKGw
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex n1b:Bv4"]#
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex ^iBIp#
utBrH
1. Windows子系统设置错误, 提示: me{u~9&
libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main [>r0 (x &.
H8[A*uYL
Windows项目要使用Windows子系统, 而不是Console, 可以这样设置: T@i* F M
[:#K_EI5%
[Project] --> [Settings] --> 选择"Link"属性页, {ri={p]l
在Project Options中将/subsystem:console改成/subsystem:windows {4,],0bjx/
oC49c~`8
2. Console子系统设置错误, 提示: 9l
&q}
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16 'xj5R=V
@[1]Q‑Vg5
控制台项目要使用Console子系统, 而不是Windows, 设置: qc @cd i
ga%/n! S
[Project] --> [Settings] --> 选择"Link"属性页, O;<wD h)Yt
在Project Options中将/subsystem:windows改成/subsystem:console ^_Hf}8H7]
K‑$h/<_ V
3. 程序入口设置错误, 提示: %}9tU>?F#
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16 ]E<Z5G1HD
~hvj3zC5xz
通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口: Bgm8IK)6
+aus m!~6
[Project] --> [Settings] --> 选择"Link"属性页, V@`b7GM‑
在Category中选择Output, hUl[1] ‑Rtt
再在Entry-point symbol中填入wWinMainCRTStartup, 即可 m| ,Tk:
xH
vTK%8qoZ
4. 线程运行时库设置错误, 提示: Z5q%L!4G
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex qIZ+%ZOu
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex arm[1]_SyL0
bPF GQlmIO
这是因为MFC要使用多线程时库, 需要更改设置: |Gz[1]<I
0OHXg=
[Project] --> [Settings] --> 选择"C/C++"属性页, ~} ,[1]H+A!?
在Category中选择Code Generation, uY~mi9
E
再在Use run-time library中选择Debug Multithreaded或者multithreaded F[/T'{
咸鱼游侠(75374355) 12:11:11 jj&G[-"bv
其中, #6@hVR[1].
Single-Threaded 单线程静态链接库(release版本) ]B(}^N>WH
Multithreaded 多线程静态链接库(release版本) R,D/:k'~k
multithreaded DLL 多线程动态链接库(release版本) =Jl/^u%H(x
Debug Single-Threaded 单线程静态链接库(debug版本) D7pQWlN/
Debug Multithreaded 多线程静态链接库(debug版本) ]kNxytH/o
Debug Multithreaded DLL 多线程动态链接库(debug版本) |8}y?kAC[1]
j/KOKvY)
单线程: 不需要多线程调用时, 多用在DOS环境下 + q2/3REzx
多线程: 可以并发运行 n S$4[!0
静态库: 直接将库与程序Link, 可以脱离MFC库运行 "c~``i/G
动态库: 需要相应的DLL动态库, 程序才能运行 L 9h‑L @
release版本: 正式发布时使用 :;#^gv H
debug版本: 调试阶段使用