gpt4 book ai didi

c++ - LIBCMT 库 : error LNK2001: unresolved external symbol _main

转载 作者:太空狗 更新时间:2023-10-29 23:05:56 28 4
gpt4 key购买 nike

是的,我知道 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 定义了memcpy、swprintf 等函数,它们是CRT 函数。 (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 库 : error LNK2001: unresolved external symbol _main,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17371508/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com