VS2005使用WTL出现 “error LNK2019: 无法解析的外部符号_main”的解决方法

  我在使用VS2005开发一个WTL项目的时候,使用ACTIVEX控件,并使用一个事件监听器接收控件的事件,在DEBUG版中没发现错误,RELEASE版中,编译的时候通过,但是链接的时候出现如下的错误提示。

 

 1>------ 已启动生成: 项目: shinedoo, 配置: Release Win32 ------
1>正在链接...
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __encode_pointer 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __encoded_null 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(tidtable.obj) : error LNK2005: __decode_pointer 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __get_osplatform 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(crt0dat.obj) : error LNK2005: __osplatform 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(calloc.obj) : error LNK2005: _calloc 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(dosmap.obj) : error LNK2005: __errno 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(dosmap.obj) : error LNK2005: __set_errno 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(dosmap.obj) : error LNK2005: __get_errno 已经在 atlmincrt.lib(atlinit.obj) 中定义
1>LIBCMT.lib(crt0.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用
1>Release/shinedoo.exe : fatal error LNK1120: 1 个无法解析的外部命令

 

解决方法:

从链接错误提示中我们很容易看出,我们看到了实际上是LIBCMT.lib和atlmincrt.lib重复定义了一些代码,所以两个LIB产生了冲突,必须在链接中忽略一个LIB。笔者试过忽略LIBCMT.lib,会产生另外的链接错误。所以忽略atlmincrt.lib后,链接通过。

忽略atlmincrt.lib的方法1:"(菜单)项目-shinedoo属性-配置属性-链接器-输入-忽略特定库"输入atlmincrt.lib,确定后编译链接都成功。

忽略atlmincrt.lib的方法2:"(菜单)项目-shinedoo属性-配置属性-链接器-命令行"输入/NODEFAULTLIB:"atlmincrt.lib",确定后编译链接都成功。


附上笔者的链接选项
/OUT:"Release/shinedoo.exe" /INCREMENTAL:NO /NOLOGO /MANIFEST /MANIFESTFILE:"Release/shinedoo.exe.intermediate.manifest" /NODEFAULTLIB:"atlmincrt.lib" /SUBSYSTEM:WINDOWS /MACHINE:X86 /ERRORREPORT:PROMPT kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值