您的位置:首页 > 大数据 > 人工智能

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

2009-03-03 10:27 639 查看
我在使用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐