C++ I';“我得到了错误”;链接:错误LNK2001:未解析的外部符号“WinMainCRTStartup”;

C++ I';“我得到了错误”;链接:错误LNK2001:未解析的外部符号“WinMainCRTStartup”;,c++,windows,visual-studio,winapi,linker-errors,C++,Windows,Visual Studio,Winapi,Linker Errors,请帮忙。 在VisualStudio2008上,我发现以下错误 ============================================================ 1>Microsoft (R) Windows Resource To Object Converter Version 9.00.30729.01 1>Copyright (C) Microsoft Corporation. All rights reserved. 1>

请帮忙。 在VisualStudio2008上,我发现以下错误

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

   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是我的解决方案中的三个项目之一 -此项目非常适合调试x64、版本x64和调试Win32。Win32版本是唯一产生这些错误的版本。 -我已经花了数小时比较了所有4个配置/机器组合的属性页,并且我确信从一个版本到下一个版本没有丢失任何属性。我特别注意了“附加依赖项”、“附加库目录”、“输入”等。当然,.lib文件的路径指向相应配置或平台的\Debug或\Release,以及\x86或\x64

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

我见过其他缺少主入口点的情况,但在本例中,所有其他版本都是无问题生成的,只有Win32 Relase版本才会生成此错误,因此我认为不需要更改代码中的任何内容


有人能提供线索吗?我没主意了。任何想法都将不胜感激。谢谢。

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


假设您的目标入口点是
main
(或者它的一个变体,如
\u tmain
wmain
),您要确保使用SubSystem属性设置为CONSOLE

WinMain,因为入口点丢失。

难以置信

我发现了问题! 导致这个脚本错误的原因非常简单:“空格”

事实证明,在配置->C/C++->输出文件->对象文件名下:我有: “$(IntDir)\”

直到我密切关注Kdiff3窗口,注意到这个小下划线表示空格,我才注意到空格。
这个空间已经存在好几个月了,因为这个项目一直无人看管(在我加入之前),因为没有人能找到它的修复程序,所以他们只是停止使用它。 很可能是复制粘贴错误


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

在我的例子中,我试图编译的文件具有错误的属性

我创建的文件扩展名中有一个游离字符,因此我的项目给了它错误的项类型:
不参与构建


重命名后,我进入了它的属性,并将项类型更改为
,这将它重置为
C/C++编译器

,您可以向我们显示您传递给编译器的确切命令行参数吗?听起来像是从VisualStudio编译,但它会在“高级”选项卡中显示命令行是什么。使用链接将其复制并粘贴到问题中。此外,请检查并确保所有生成配置都以Unicode为目标。我的第一反应是,代码中的入口点函数签名是非Unicode版本,但在发布模式中链接到的库是Unicode版本。因此,链接器无法找到它需要的内容。但为了让这一点有意义,所有其他编译模式都必须针对非Unicode配置,这似乎不太可能。这是命令行:/VERBOSE/OUT:“.\Release/DiskTest.exe”/VERSION:3.800/INCREMENTAL:NO/NOLOGO/LIBPATH:”C:\WinIRDir\SbfSdk\lib\x86\Release”/LIBPATH:“…\ \SbfSdk\lib\x86\Release”/MANIFEST/file:“\Release\DiskTest.exe.intermediate.manifest”/MANIFESTUAC:“level='asInvoker'uiAccess='false'”/SUBSYSTEM:WINDOWS/DYNAMICBASE:NO/MACHINE:X86/ERRORREPORT:PROMPT SBF_Util.lib附加选项:/version:3.607/SUBSYSTEM:WINDOWS/IGNORE:4089I删除了“附加选项”,但仍然出现错误。此外,所有模式都使用“字符集”“=多字节(非unicode),即使是我的解决方案中的其他两个项目,它们都使用多字节。我尝试在失败模式(release/Win32)和“良好”模式(release/x64)下使用Unicode,但在良好模式下出现了C2664错误,在失败模式下也出现了同样的错误,所以我恢复到多字节模式。现在是2012年,您仍在构建针对MBC的应用程序?谢谢您的建议。但是,链接器->系统->子系统在所有4种配置/平台组合中都设置为Windows,但其他3种组合使用此设置链接良好,但Release/Win32除外。还有其他想法吗?谢谢你的建议。那么,我们如何解释调试(win32和x64)和发布/x64模式是正确构建的呢?该错误仅在构建win32版本时出现。我认为您的win32版本项目选项中有错误,请向我显示您的链接器命令行。仔细阅读您的帖子后,我发现CRT有问题。如果在linker/NODEFAULTLIB和/ENTRY中设置:WinMain@16重新编译时,错误仍然存在?刚刚添加了/NODEFAULTLIB和/ENTRY:WinMain@16到链接器->命令行->其他选项。重新编译并得到相同的错误。我还将VC项目文件解析为“release/wi32”和“release/x64”的单独文本文件,然后将这两个文件与Kd进行比较