是的,我知道在Stackoverflow上已经有数百篇有关LNK2001的文章。
但是他们都没有解决我的问题。
所以我在这里发布我的解决方案。
症状:
ATL DLL可以像Debug一样进行编译,但是会失败,并且上面的错误编译为Release。
在互联网上停留了一个小时,发现诸如“您是否定义了main()函数?”之类的无用提示。我认为我必须针对我的特定问题发布解决方案。
最佳答案
重要:LNK2001可能有数百万种原因!
如果我的解决方案在您的特定情况下无济于事,并且此页面也无效:http://msdn.microsoft.com/en-us/library/f6xx1b1z%28v=vs.71%29.aspx
然后注意在搜索中包括尽可能多的关键字。就像在我的情况下“LIBCMT.lib LNK2001 _main”一样。这对于避免淹没数百万个搜索结果至关重要。
LIBCMT.LIB定义了诸如CMC函数之类的函数memcpy,swprintf等。 (C运行时库)
我在项目中使用了其中一些功能。那么为什么要构建Debug版本而不能发布Release版本呢?
原因是CRT库需要初始化,它具有一个启动代码,该代码必须被调用一次(通常在_main中)
如果项目定义了_ATL_MIN_CRT,则CRT启动代码将从Release版本的Exe,Dll中排除,以减小文件大小。
知道这一解决方案很简单:
解决方案A)从项目设置中删除_ATL_MIN_CRT
解决方案B)在文件Stdafx.h的末尾添加以下行:
#undef _ATL_MIN_CRT
那解决了问题。
当我在其他项目中重用我的类(class)时,我将在类(class)开始时输入:
#ifdef _ATL_MIN_CRT
#error _ATL_MIN_CRT is not valid for this project
#endif
这样可以确保将来会在另一个项目中重复使用我的代码。
埃尔穆
关于c++ - LIBCMT.lib:错误LNK2001:无法解析的外部符号_main,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17371508/