我爱电脑技术论坛's Archiver

476304467 发表于 2008-4-23 17:33

VC++c连接错误及其解决方法

unresolved external symbol _main相关错误及其解决  y1izwo^P1}"PN
  3e7_]0T5?qH Y]-V T
在创建MFC项目时, 不使用MFC AppWizard向导, 如果没有设置好项目参数, 就会在编译时产生很多连接错误, 如error LNK2001错误, 典型的错误提示有:
6N-Is%W!fW:f-S!d$~ libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
haKn,ZkC ?;o4h&L LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
.k8nun n T4F msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
(v'_%h1L9qj nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex "rYYv`G
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
.EPqGK"p6~ K8B"~
oK+~ CJ@ iw$r9_;F0Tu(t4N9L
下面介绍解决的方法:
?4U;`5g$T3E~ 1. Windows子系统设置错误, 提示:
5jt9B g@N-O libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
-P#v1O(d6d'j#^5V2h v7a Windows项目要使用Windows子系统, 而不是Console, 可以这样设置: 2d]F#Jm+n
[Project] --> [Settings] --> 选择"Link"属性页, p&}Tq&A ^i
在Project Options中将/subsystem:console改成/subsystem:windows b%pBn yIZM
]L&|0qR\h9} X

0zz/Z+}3G._0W:t0I 2. Console子系统设置错误, 提示:
;C l$W7Y!yn Bd&F LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
&w9fa(J!j 控制台项目要使用Console子系统, 而不是Windows, 设置:
c"Lji1Q%mo [Project] --> [Settings] --> 选择"Link"属性页,
_:z#x` TU4x.P 在Project Options中将/subsystem:windows改成/subsystem:console
C S,o [o6s!mTb2z .Hw?TPG2oL(m
O pS5@%Pw%{*~y|w
3. 程序入口设置错误, 提示: m"T,VC+`,ZN1JX
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
H!K+nv:}#|M T 通常, MFC项目的程序入口函数是WinMain, 如果编译项目的Unicode版本, 程序入口必须改为wWinMainCRTStartup, 所以需要重新设置程序入口:
+[nn*[H3E+` [Project] --> [Settings] --> 选择"Link"属性页, :QE;f^ K
在Category中选择Output,
(u.b pnS'd+\ X5? 再在Entry-point symbol中填入wWinMainCRTStartup, 即可
9tBr:]9z9F s \fQ.U n}| M w*\

_%j$Pe*}E 4. 线程运行时库设置错误, 提示: +~;LhF;j$O X5d){1~
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex C&gC&ZY
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex
&Y R4g(o|2M 这是因为MFC要使用多线程时库, 需要更改设置: !n D5Jto/ai
[Project] --> [Settings] --> 选择"C/C++"属性页,
+|/Hgx`4\8g~ 在Category中选择Code Generation,
?3Y|E3m&[ rn1t6zv 再在Use run-time library中选择Debug Multithreaded或者multithreaded
4g3@y mF-H f5s 其中, 6e{-h$r/|9lf?
Single-Threaded 单线程静态链接库(release版本)
J9[(t]iB#ad/bs Multithreaded 多线程静态链接库(release版本)
3CW j;@:o Wy%d multithreaded DLL 多线程动态链接库(release版本)
vpU-dws6~Eg1Dd Debug Single-Threaded 单线程静态链接库(debug版本)
}Q3F y;y&k"` Debug Multithreaded 多线程静态链接库(debug版本) FA"c qn%C]
Debug Multithreaded DLL 多线程动态链接库(debug版本) *`Zx `h
单线程: 不需要多线程调用时, 多用在DOS环境下 0E hp%tp;L,F6lF
多线程: 可以并发运行 "I!y:SUL&S.U2q&Y [
静态库: 直接将库与程序Link, 可以脱离MFC库运行
kZ&_"a t 动态库: 需要相应的DLL动态库, 程序才能运行 iz#O"|!ne#kw
release版本: 正式发布时使用 VknP Y"?J
debug版本: 调试阶段使用

页: [1]

Powered by Discuz! Archiver 6.1.0  © 2001-2007 Comsenz Inc.