编译ATL工程的连接错误:__fltused already defined 和 unresolved external symbol _main
2008-09-03 09:33
525 查看
现象:一个ATL工程, DEBUG版本已经通过,编译 ReleaseMinSize版本时
出现以下错误:
Linking...
msvcrt.lib(dllsupp.obj) : error LNK2005: __fltused already defined in StdAfx.obj
msvcrt.lib(dllsupp.obj) : warning LNK4006: __fltused already defined in StdAfx.obj; second definition ignored
LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main
Creating library ReleaseMinSize/VideoMod.lib and object
ReleaseMinSize/VideoMod.exp
ReleaseMinSize/VideoMod.exe : fatal error LNK1169: oneor more multiply defined symbols found
Error executing link.exe.
原因与解决方法:
出错原因:
如果你在工程中使用了CRT函数,而这些函数又需要CRT启动代码,就会出现这种链接错误。默认情
况下,Release配置的Preprocessor definitions中定义了_ATL_MIN_CRT,它将CRT启动代码从你的EXE
或DLL剔出去了。
背景知识:
1:ATL支持把一个服务器编连优化成最小尺寸或者依赖性最小。我们可以定义三个预处理器符号来影响
服务器的优化。
_ATL_MIN_CRT 服务器不链接标准的C/C++运行库
_ATL_DLL 服务器动态链接工具函数库atl.dll
_ATL_STATIC_REGISTRY 服务器静态链接对组件注册的支持
如果定义了预处理器符号_ATL_MIN_CRT,那么我们的服务器不链接C/C++运行库,并且ATL提供了
函数malloc、realloc、new和delete的一个实现。当定义了这个符号时,我们不能调用任何其他的C/C+
+运行库的函数。否则,就会受到这样的待遇:
LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main
ATL向导生成的ATL工程为所有的Release版本的编连定义了_ATL_MIN_CRT,但是没有为Debug版本定义这个符号。
Debug配置没有定义这三个符号中的任何一个。
RelMinSize配置定义了_ATL_MIN_CRT和_ATL_DLL。
RelMinDependency配置定义了_ATL_MIN_CRT和_ATL_STATIC_REGISTRY。
2:
C Run-TimeLibrary Characteristics Option Defined
(withoutiostream)
LIBC.LIB a statically linked library /ML
for single-threaded
programs
(Single threaded, static link)
LIBCMT.LIB a statically linked library
that supports multithreaded /MT _MT
programs(Multithreaded,
static link)
MSVCRT.LIB Multithreaded, dynamic /MD _MT,_DLL
link (import library for
MSVCRT.DLL)
解决方法:
Project->Settings:Setting for “Multiple configuration”
C/C++ Tab:General category, Preprocessor definitions去除_ATL_MIN_CRT这个预处理符号;
出现以下错误:
Linking...
msvcrt.lib(dllsupp.obj) : error LNK2005: __fltused already defined in StdAfx.obj
msvcrt.lib(dllsupp.obj) : warning LNK4006: __fltused already defined in StdAfx.obj; second definition ignored
LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main
Creating library ReleaseMinSize/VideoMod.lib and object
ReleaseMinSize/VideoMod.exp
ReleaseMinSize/VideoMod.exe : fatal error LNK1169: oneor more multiply defined symbols found
Error executing link.exe.
原因与解决方法:
出错原因:
如果你在工程中使用了CRT函数,而这些函数又需要CRT启动代码,就会出现这种链接错误。默认情
况下,Release配置的Preprocessor definitions中定义了_ATL_MIN_CRT,它将CRT启动代码从你的EXE
或DLL剔出去了。
背景知识:
1:ATL支持把一个服务器编连优化成最小尺寸或者依赖性最小。我们可以定义三个预处理器符号来影响
服务器的优化。
_ATL_MIN_CRT 服务器不链接标准的C/C++运行库
_ATL_DLL 服务器动态链接工具函数库atl.dll
_ATL_STATIC_REGISTRY 服务器静态链接对组件注册的支持
如果定义了预处理器符号_ATL_MIN_CRT,那么我们的服务器不链接C/C++运行库,并且ATL提供了
函数malloc、realloc、new和delete的一个实现。当定义了这个符号时,我们不能调用任何其他的C/C+
+运行库的函数。否则,就会受到这样的待遇:
LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main
ATL向导生成的ATL工程为所有的Release版本的编连定义了_ATL_MIN_CRT,但是没有为Debug版本定义这个符号。
Debug配置没有定义这三个符号中的任何一个。
RelMinSize配置定义了_ATL_MIN_CRT和_ATL_DLL。
RelMinDependency配置定义了_ATL_MIN_CRT和_ATL_STATIC_REGISTRY。
2:
C Run-TimeLibrary Characteristics Option Defined
(withoutiostream)
LIBC.LIB a statically linked library /ML
for single-threaded
programs
(Single threaded, static link)
LIBCMT.LIB a statically linked library
that supports multithreaded /MT _MT
programs(Multithreaded,
static link)
MSVCRT.LIB Multithreaded, dynamic /MD _MT,_DLL
link (import library for
MSVCRT.DLL)
解决方法:
Project->Settings:Setting for “Multiple configuration”
C/C++ Tab:General category, Preprocessor definitions去除_ATL_MIN_CRT这个预处理符号;
相关文章推荐
- vc++中的编译链接错误error link2001 unresolved external symbol _main解决办法
- VC,link error,ATL 链接错误"unresolved external symbol _main"
- DSHOW编译错误:strmbasd.lib(dllentry.obj) : error LNK2001: unresolved external symbol "class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)
- VC++连接错误2001 error LNK2001: unresolved external symbol _WinMain@16
- VC引入lib库并解决连接错误unresolved external symbol "__declspec(dllimport) const DllClass::`vftable'" (__imp_?
- 链接错误"unresolved external symbol _main"
- LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup编译出错的解决方法
- LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main 错误解决
- OpenSceneGraph 编译 error LNK2019:unresolved external symbol 错误
- ATL DLL Release"LIBCMT.lib(crt0.obj) : error LNK2001: unresolved external symbol _main"
- 汇编开发环境搭建以及LNK2001:unresolved external symbol __CorDllMain@错误
- LNK2019: unresolved external symbol _main referenced in function ___tmainCRTStartup编译出错的解决方法
- VC 6.0 serverDlg.obj : error LNK2001: unresolved external symbol __imp__listen@8编译错误
- Qt中编译出现mainwindow.obj:-1: error: LNK2019: unresolved external symbol "public: __thiscall MyWidget::M
- LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main错误的解决
- LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main 错误解决
- CUDA出现连接错误error LNK2019: unresolved external symbol一般解决方法
- error LNK2019: unresolved external symbol _IID_IMPEG2PIDMap连接错误的解决
- mini6410 WinCE visual studio 编译错误:error LNK2001: unresolved external symbol dpCurSettings
- 编译vs2010 工程出unresolved external symbol __ultod3