LIBCMT.lib:错误LNK2001:未解析的外部符号_main

时间:2013-06-28 18:41:31

标签: c++ main crt lnk2001

是的我知道Stackoverflow上有数百篇关于LNK2001的帖子。 但他们中没有人解决了我的问题。 所以我在这里发布我的解决方案。

症状: ATL DLL编译为Debug,但由于上述错误编译为Release而失败。

坚持一个小时在互联网上搜索并找到无用的提示,例如“你定义了一个main()函数吗?”我认为我必须针对我的具体问题发布解决方案。

1 个答案:

答案 0 :(得分:1)

重要:LNK2001可能有数百万个原因!

如果我的解决方案对您的具体情况没有帮助,并且此页面既没有:http://msdn.microsoft.com/en-us/library/f6xx1b1z%28v=vs.71%29.aspx

然后请注意尽可能多地在搜索中包含关键字。就像在我的情况下“LIBCMT.lib LNK2001 _main”。这对于避免数以百万计的搜索结果淹没至关重要。

LIBCMT.LIB定义了诸如memcpy,swprintf等函数,它们是CRT函数。 (C运行时库)

我在项目中使用了其中一些功能。那么为什么Debug版本构建和Release版本没有?

原因是CRT库需要初始化,它有一个必须被调用一次的启动代码(通常在_main期间)

如果项目定义了_ATL_MIN_CRT,则从Exe中排除CRT启动代码,发布版本中的Dll将减少文件大小。

知道这个解决方案很简单:

解决方案A)从项目设置中删除_ATL_MIN_CRT

解决方案B)在文件末尾Stdafx.h放下这一行:

#undef _ATL_MIN_CRT

解决了这个问题。

当我在课堂开头的其他项目中重用我的课时:

#ifdef _ATL_MIN_CRT
    #error _ATL_MIN_CRT is not valid for this project
#endif

这样可以确保将来在另一个项目中重复使用我的代码,我会立即收到警告。

Elmü