如何启用 VS2013 c++ 编译器功能?
Posted
技术标签:
【中文标题】如何启用 VS2013 c++ 编译器功能?【英文标题】:How do you enable VS2013 c++ compiler functionality? 【发布时间】:2015-07-30 12:57:20 【问题描述】:所以我在这里很困惑。我有一个库“A”,是我用 VS2013 用 C++ 编写的,可以成功地在项目“X”中包含和构建它。
Project "X" 是同样在 VS2013 中开发的 MFC 应用,其Platform Toolset
值设置为VS2013
。它恰好是一个 Win32 应用程序。
我现在必须将库包含在另一个项目“Y”中(这是一个 VS2010 项目,但我(相信我)使用 VS 将它转换为 2013)。
项目“Y”不是 MFC 应用程序,而是一个 .dll,其 Platform Toolset
值也设置为 VS2013
。它是一个 x64 应用程序。
但是,当我尝试构建“Y”时,我收到大量编译器错误,主要是因为该库使用 C++11 功能,而且显然 VS 不允许这样做。这些错误主要是向量括号初始化语法问题。例如。 non-aggregates cannot be initialized with initializer list
。但除此之外,它也找不到strtoll
和report_rangecheckfailure
的符号。
但我不明白。据我所知,VS2013 应该支持这些功能,而且它出现在我的其他项目中。这里可能是什么问题?要使用 2013 编译器,我还需要做些什么吗?
编辑 更清楚地说,是这样的赋值给出了聚合编译器消息:
std::vector<std::string> paramVector = "username", "time", "hours", "udata" ;
【问题讨论】:
我会确保您使用的是 VS2013 更新 4,因为它修复了初始化列表的一些问题。我使用的模式就像你一直使用的那样,没有任何问题。 我正在更新 5,所以我应该没问题。这非常奇怪,尤其是因为就像我说的那样,这在使用相同版本 VS 的不同项目上正常工作。 您是否想让 win32(32 位)应用程序使用 x64 库(64 位)? @Wilbert,不,“Y”设置为 x64 .dll,并使用 64 位库(libcurl 和 openssl)。我自己构建了这两个库。 【参考方案1】:它也找不到 strtoll 和 report_rangecheckfailure 的符号
对潜在问题的最强提示,那些将是链接器错误。所以一个铁的事实是显而易见的:你没有链接 VS2013 C 运行时库。这些符号存在于 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\libmsvcrt.lib 和 libcmt.lib 中,但不存在于早期版本中,如 VS2010 版本。
从那里只需很短的时间就可以解释“无法使用初始化列表初始化非聚合”错误。显然,您也没有包含适当的 VS2013 <vector>
包含文件。需要编译该向量分配。再次,包括它的 VS2010 版本解释了该错误。
不可否认的事实:您的 Y 项目配置不正确。
编译器和链接器的错误两者确实直接指向工具集目标设置,即使您认为它是正确的。一个标准的错误是更改 Debug 配置的设置,但忘记为 Release 配置也这样做。让项目 > 属性 > VC++ 目录设置错误将是另一种方式。编译器的 /showIncludes 和链接器的 /verbose 选项为您提供足够的反馈来验证您的假设。如果您绝对绝望,请重新创建 Y 项目。
【讨论】:
啊,VC++ 目录是问题所在!非常感谢,我没有注意到它们是错误的,因为它们被设置为宏。/showIncludes
选项非常方便。【参考方案2】:
可能的原因之一是VS2013部分支持C++11,详情见此表https://msdn.microsoft.com/en-us/library/vstudio/hh567368.aspx
不管怎样,最好展示一个你目前遇到的错误的例子。
【讨论】:
该页面确实声称 initalizer 列表在 2013 年可用。此外,我确实给出了一个最常见错误的示例。其余的错误几乎与初始化失败有关。 问题:如果你没有“=”符号,它会编译吗:std::vector<:string> paramVector "username", "time", "hours", "udata" ; 不,但我得到一个不同的错误:error C2601: 'paramVector' : local function definitions are illegal
那么,您可以尝试显式包含此标头吗? msdn.microsoft.com/en-us/library/vstudio/dn454608.aspx以上是关于如何启用 VS2013 c++ 编译器功能?的主要内容,如果未能解决你的问题,请参考以下文章
VS2005 MFC 预编译头文件来自编译器的早期版本,或者预编译头为 C++ 而在 C 中使用它(或相反)