MSVC在编译错误时失败而不编译任何源

时间:2012-03-29 22:01:35

标签: c++ visual-studio visual-studio-2010 visual-c++ visual-c++-2010

所有源文件似乎编译得很好。

然而,由于我实现了这一点,我得到一个新的编译器错误:

1>------ Erstellen gestartet: Projekt: OpenLieroX, Konfiguration: Debug Win32 ------
1>Der Buildvorgang wurde am 29.03.2012 23:57:39 gestartet.
1>InitializeBuildStatus:
1>  Aktualisieren des Timestamps von "Debug\OpenLieroX.unsuccessfulbuild".
1>ClCompile:
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>  Alle Ausgaben sind aktuell.
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(54): warning RC4011: identifier truncated to '_CRT_SECURE_CPP_OVERLOAD_STANDA'
1>  
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\string.h(76): warning RC4011: identifier truncated to '_CRT_SECURE_CPP_OVERLOAD_SECURE'
1>  
1>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\yvals.h(367): warning RC4011: identifier truncated to '_DISABLE_DEPRECATE_STATIC_CPPLI'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(83): warning RC4011: identifier truncated to 'BOOST_NO_CV_VOID_SPECIALIZATION'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(92): warning RC4011: identifier truncated to 'BOOST_NO_LIMITS_COMPILE_TIME_CO'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(102): warning RC4011: identifier truncated to 'BOOST_NO_LONG_LONG_NUMERIC_LIMI'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(117): warning RC4011: identifier truncated to 'BOOST_NO_MS_INT64_NUMERIC_LIMIT'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(133): warning RC4011: identifier truncated to 'BOOST_NO_TEMPLATE_PARTIAL_SPECI'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(134): warning RC4011: identifier truncated to 'BOOST_BCB_PARTIAL_SPECIALIZATIO'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(141): warning RC4011: identifier truncated to 'BOOST_NO_TEMPLATE_PARTIAL_SPECI'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(142): warning RC4011: identifier truncated to 'BOOST_NO_ARRAY_TYPE_SPECIALIZAT'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(149): warning RC4011: identifier truncated to 'BOOST_NO_TEMPLATE_PARTIAL_SPECI'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(158): warning RC4011: identifier truncated to 'BOOST_NO_TEMPLATE_PARTIAL_SPECI'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(159): warning RC4011: identifier truncated to 'BOOST_NO_PARTIAL_SPECIALIZATION'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(169): warning RC4011: identifier truncated to 'BOOST_NO_TEMPLATED_ITERATOR_CON'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(186): warning RC4011: identifier truncated to 'BOOST_NO_ARGUMENT_DEPENDENT_LOO'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(186): warning RC4011: identifier truncated to 'BOOST_FUNCTION_SCOPE_USING_DECL'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(341): warning RC4011: identifier truncated to 'BOOST_NO_0X_HDR_INITIALIZER_LIS'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(344): warning RC4011: identifier truncated to 'BOOST_NO_0X_HDR_INITIALIZER_LIS'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/config/suffix.hpp(566): warning RC4011: identifier truncated to 'BOOST_NO_EXPLICIT_FUNCTION_TEMP'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/limits.hpp(22): warning RC4011: identifier truncated to 'BOOST_NO_LONG_LONG_NUMERIC_LIMI'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/limits.hpp(23): warning RC4011: identifier truncated to 'BOOST_NO_MS_INT64_NUMERIC_LIMIT'
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/cstdint.hpp(300): error RC2177: constant too big
1>  
1>C:\Program Files (x86)\boost\boost_1_47\boost/cstdint.hpp(300): fatal error RC1012: mismatched parenthesis : missing '
1>
1>Fehler beim Erstellen

我真的不明白为什么我会这样做。而且不是来自什么源文件,因为它不再编译任何源(因为所有源都已成功编译)。

3 个答案:

答案 0 :(得分:5)

(重新发表评论,因此问题可以标记为已回答。)

您不应该使用资源编译器编译普通代码。

答案 1 :(得分:2)

虽然明确的答案在这里已经是正确的一些背景: MSVC资源编译器在char 31处截断宏名称。 类似的问题也出现在更新的系统头文件中,例如来自VC10或更高版本的系统头文件,这些头文件的宏名称定义超过31个字符。另请参阅M $的回复,他们简单地称之为“按设计”,而不是修复他们的RC.EXE:

http://connect.microsoft.com/VisualStudio/feedback/details/532929/rc4011-warnings-from-vc10-rc

宏名称大于31个字符的受影响系统头是自VC10 string.h,tchar.h,wchar.h,yvals.h以及可能还有更多... 另见:

http://social.msdn.microsoft.com/Forums/vstudio/en-US/ea289832-c48c-475b-a922-bf94d2ee54e4/vs2012-update-1-fatal-error-rc10056-in-c-project-when-v110xp-platform-is-chosen

答案 2 :(得分:2)

当尝试使用Visual Studio 2013编译Windows XP和POS Ready 2009作为目标时,我遇到了类似的问题。应用程序在Visual Studio 2013 (v120)配置属性中使用标准Platform Toolset设置编译正常但是当更改为Visual Studio 2013 - Windows XP (v120_xp)以定位Windows XP时,我收到了编译错误:

>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\include\winsock2.h(2752): fatal error RC10056:

跳转到WinSock2.h包含文件中的位置显示了一个使用__out_bcount_part_opt()宏的函数原型。

看到此帖后,我意识到错误是资源编译器错误。进一步查看我发现的是源文件和资源文件中包含的头文件piflocal.h包含WinSock2.h头文件的包含。

换句话说,应用程序源代码有一个头文件piflocal.h,其中包含资源文件resource.h使用的头文件pif.rc所需的定义以及C源代码文件。 piflocal.h中的某些定义需要Microsoft标准头文件WinSock2.h中的定义,因此WinSock2.h文件#included into piflocal.h使其可用。但是,当资源编译器作为拉入各种头文件的一部分,尝试将WinSock2.h文件作为处理piflocal.h的一部分进行处理时,它会遇到__out_bcount_part_opt()宏并失败。

顺便说一下,__out_bcount_part_opt()宏是Header Annotations used in Windows headers的一部分。

  

标题注释描述函数如何使用其参数和   回报价值。这些注释已添加到许多Windows中   头文件,以帮助您确保您正在调用Windows API   正确。如果您启用了可用的代码分析   使用Visual Studio 2005,编译器将生成6000级   如果您没有根据使用情况调用这些功能,则会发出警告   通过注释描述。您还可以添加这些注释   在您自己的代码中,以确保正确调用它。至   在Visual Studio中启用代码分析,请参阅您的文档   Visual Studio版本。

     

这些注释在Specstrings.h中定义。它们建立在   原语是标准注释语言(SAL)和标准注释语言的一部分   使用 declspec(" SAL *")实现。

然后,我对resource.hpiflocal.h标头文件进行了必要的源代码更改,以便pif.rcpiflocal.h所需的少数定义被移至{{1}编译resource.h时,资源编译器不再包含或引入头文件piflocal.h

通过从资源编译器提取的头文件列表中删除pif.rc,错误不再发生。

我不知道为什么这会使用标准的Visual Studio 2013设置进行编译,并且因为定位Windows XP及其变种而失败。

结论:如果您遇到此错误或类似错误,您很可能会在资源编译器中包含一个带有宏定义的头文件,该文件与资源编译器不兼容。