Chinaunix首页 | 论坛 | 博客
  • 博客访问: 971511
  • 博文数量: 120
  • 博客积分: 6454
  • 博客等级: 准将
  • 技术积分: 1739
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-28 17:45
文章分类

全部博文(120)

文章存档

2014年(1)

2013年(1)

2012年(11)

2011年(16)

2010年(6)

2009年(11)

2008年(30)

2007年(44)

分类: C/C++

2007-10-12 23:47:17

    在编写C++尤其是MFC程序时,如果项目参数没有设置好,在编译时产生很多连接错误,比如error LNK2001错误,典型的错误提示有:

libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main
LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol _WinMain@16
msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol _WinMain@16
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

下面是出现这些error的原因及解决办法:

  1. Windows子系统设置错误,提示如下:

libcmtd.lib(crt0.obj) : error LNK2001: unresolved external symbol _main

     原因:Windows项目要使用Windows子系统,而不是Console

     解决:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:console改成/subsystem:windows

  2. Console子系统设置错误,提示如下:

LIBCD.lib(wincrt0.obj) : error LNK2001: unresolved external symbol

     原因:控制台项目要使用Console子系统,而不是Windows

     解决:[Project] --> [Settings] --> 选择"Link"属性页,在Project Options中将/subsystem:windows改成/subsystem:console

  3. 程序入口设置错误,提示如下:

msvcrtd.lib(crtexew.obj) : error LNK2001: unresolved external symbol

     原因:通常,MFC项目的程序入口函数是WinMain,如果编译项目的Unicode版本,程序入口必须改为wWinMainCRTStartup

     解决:需要重新设置程序入口:[Project] --> [Settings] --> 选择"Link"属性页,在Category中选择Output,再在Entry-point symbol中填入wWinMainCRTStartup

  4. 线程运行时库设置错误,提示如下:

nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __beginthreadex
nafxcwd.lib(thrdcore.obj) : error LNK2001: unresolved external symbol __endthreadex

     原因:要使用多线程时库

     解决:[Project] --> [Settings] --> 选择"C/C++"属性页,在Category中选择Code Generation,再在Use run-time library中选择Debug Multithreaded或者multithreaded

其中,
Single-Threaded 单线程静态链接库(release版本)
Multithreaded 多线程静态链接库(release版本)
multithreaded DLL 多线程动态链接库(release版本)
Debug Single-Threaded 单线程静态链接库(debug版本)
Debug Multithreaded 多线程静态链接库(debug版本)
Debug Multithreaded DLL 多线程动态链接库(debug版本)

单线程: 不需要多线程调用时, 多用在DOS环境下
多线程: 可以并发运行
静态库: 直接将库与程序Link, 可以脱离MFC库运行
动态库: 需要相应的DLL动态库, 程序才能运行
release版本: 正式发布时使用
debug版本: 调试阶段使用

阅读(1745) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~