当你OCX控件的ReleaseMinDependency版时,你得到了下面这个链接错误:
LIBCMT.LIB(crt0.obj) : error LNK2001: unresolved external symbol _main
而Debug版本的编连却顺利通过。
出错原因:
如果你在工程中使用了CRT函数,而这些函数又需要CRT启动代码,就会出现这种链接错误。默认情况下,ReleaseMinDepende配置的Preprocessor definitions中定义了_ATL_MIN_CRT,它将CRT启动代码从你的EXE或DLL剔出去了。
背景知识:
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 extern

本文解析了在OCX控件的ReleaseMinDependency版本中遇到的链接错误:unresolved externalsymbol_main。深入探讨了错误原因,即预处理器定义_ATL_MIN_CRT剔除了CRT启动代码,以及如何通过修改工程设置来解决此问题。
532

被折叠的 条评论
为什么被折叠?



