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
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
相关文章推荐
- 使用动态库时出现,error LNK2019 无法解析的外部符号可能的解决方法。
- 使用SDL2出现 “error LNK2019: 无法解析的外部符号 _SDL_main,该符号在函数 _main 中被引用” 时的可能错误记录
- error LNK2019: 无法解析的外部符号 __imp__FtpGetFileA@28 解决方法
- 在编译时出现无法解析的外部符号Cxx::AssertValid(void)const的解决方法
- Qt Creator5.4中出现error LNK2019 无法解析的外部符号的解决办法
- error LNK2019: 无法解析的外部符号 (C++编程出现问题的解决办法)
- C++中使用类模板时出现:“error LNK2019: 无法解析的外部符号”的解决办法
- log4cplus使用过程中“LOG4CPLUS_WARN”: 找不到标识符和无法解析的外部符号(链接错误)的解决方法
- error LNK2019: 无法解析的外部符号(编程解决方法)
- 错误 1 error LNK2019: 无法解析的外部符号 __imp__pthread_create,该符号在函数 _main 中被引用 解决方法
- MFC采用MSComm控件通信时,出现error LNK2001:无法解析的外部符号问题的解决方法
- error LNK2019: 无法解析的外部符号 (解决方法)
- Vs 中出现 error LNK2019: 无法解析的外部符号的解决参考
- “error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStartup 中被引用”解决方法。
- C++中使用类模板定义对象时出现:“error LNK2019: 无法解析的外部符号”的解决办法
- VS2010 在编译一个驱动时出现无法解析的外部符号 的解决方法
- error LNK2019: 无法解析的外部符号 (解决方法)
- error LNK2019: 无法解析的外部符号(编程解决方法)
- error LNK2019: 无法解析的外部符号的解决方法
- error LNK2019: 无法解析的外部符号(编程解决方法)