如何启用 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。但除此之外,它也找不到strtollreport_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 &lt;vector&gt; 包含文件。需要编译该向量分配。再次,包括它的 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 中使用它(或相反)

VS2013编程C++ 调试和生成老是出现问题,求救~~~

Resharper 8:导航到反编译源不起作用

vs2013的语言库与vc++的语言库的不同都有哪些?

Visual C++ 编译器 2012 年 11 月 CTP 与 Qt Creator for C++11

vs2013编译c++怎么添加qt库啊,我一编译程序就提示打不开文件...之类的,求解