我收到错误“LINK:错误LNK2001:未解析的外部符号_WinMainCRTStartup”

时间:2012-05-16 03:02:53

标签: c++ windows visual-studio winapi linker-errors

请帮忙。 在Visual Studio 2008上,我收到以下错误。

============================================================

   1>Microsoft (R) Windows Resource To Object Converter Version 9.00.30729.01
   1>Copyright (C) Microsoft Corporation.  All rights reserved.
   1>adding resource. type:ICON, name:1, language:0x0409, flags:0x1010, size:744
   1>adding resource. type:ICON, name:2, language:0x0409, flags:0x1010, size:296
   1>adding resource. type:GROUP_ICON, name:128, language:0x0409, flags:0x1030, size:34
   1>adding resource. type:DIALOG, name:100, language:0x0409, flags:0x1030, size:374
   1>adding resource. type:DIALOG, name:102, language:0x0409, flags:0x1030, size:784
   1>adding resource. type:VERSION, name:1, language:0x0409, flags:0x30, size:928
   1>adding resource. type:STRING, name:7, language:0x0409, flags:0x1030, size:68

   1>LINK : error LNK2001: unresolved external symbol _WinMainCRTStartup

   1>.\Release/DiskTest.exe : fatal error LNK1120: 1 unresolved externals

   1>Build log was saved at "file://c:\WinIRDir\Utilities\DiskTest\Release\BuildLog.htm"
   1>DiskTest - 2 error(s), 0 warning(s)
   1>Build log was saved at "file://c:\WinIRDir\Utilities\CommApp\Release\BuildLog.htm"
==============================================================

情况如下。 - DiskTest.exe是我的解决方案中的3个项目之一 - 该项目完美适用于Debug x64,Release x64和Debug Win32。发布Win32是唯一产生这些错误的人。 - 我花了几个小时来比较所有4个配置/机器组合的属性页面,并且我确信从一个版本到下一个版本都没有遗漏任何属性。我特别注意“附加依赖项”,“其他Librari目录”,“输入”等。当然,.lib文件的路径指向\ Debug或\ Release,以及\ x86或\ x64,用于相应的配置或平台

此项目唯一的“附加依赖项”是用于Debug的SBF_Util.lib和SBF_Utild.lib。我确保这个库的所有4个版本(调试win32和x64,以及Release win32和x64)都存在于每个“附加库目录”中指定的文件夹中。我还检查了每个版本库上的dumpbin以确保平台匹配

我已经看到其他缺少主要入口点的情况,但在这种情况下,所有其他版本构建都没有问题,只有在Win32 Relase版本上生成此错误,所以我认为我不需要改变代码中的任何内容。

任何人都可以提供任何线索吗?我没有想法。任何想法将非常感谢。感谢。

4 个答案:

答案 0 :(得分:5)

UNBELIEVABLE !!!

我发现了问题! 导致这一致命错误的原因非常简单:“空间”

事实证明,在Configuration-> C / C ++ - > OutputFiles->对象文件名:我有: “$(IntDir)\”

在我非常注意Kdiff3窗口之前没有注意到空间,并注意到这个微小的下划线表示空间。
这个空间已经存在了几个月,因为这个项目无人看管(在我登船之前),因为没有人能找到它的修复,所以他们就停止使用它了。 很可能是复制粘贴错误。

谢谢大家的意见。特别是Xearinox的第一个答案让我想到了比较所有模式。我将尝试找一些时间来编写一个工具来将项目/解决方案文件解析成一个4列的工作表,其中列出了所有配置和平台的所有属性,因此我们可以轻松地比较它们。再次感谢大家。

答案 1 :(得分:2)

打开项目的设置页面,转到链接器系统,然后检查子系统属性。通过从配置下拉框切换配置,确保在所有项目配置中将其设置为相同的值。

假设您的预期入口点是main(或其变体之一,例如_tmainwmain),您希望确保将SubSystem属性设置为<强> CONSOLE

答案 2 :(得分:2)

WinMain缺少入口点。

答案 3 :(得分:0)

就我而言,我尝试编译的文件具有错误的属性。

我在文件扩展名中创建了一个带有迷路字符的文件,因此我的项目为其提供了错误的项目类型:Does not participate in build

重命名后,我进入了它的属性,并将项目类型更改为<reset to default>,将其重置为C/C++ Compiler