所以我在这里很困惑。我有一个用 VS2013 用 C++ 编写的库“A”,可以在项目“X”中成功包含和构建它。
“X”项目是一个同样在 VS2013 中开发的 MFC 应用程序,其 Platform Toolset
值设置为 VS2013
。它恰好是一个 Win32 应用程序。
我现在必须将该库包含在另一个项目“Y”中(这是一个 VS2010 项目,但我(相信我)使用 VS 将其转换为 2013)。
“Y”项目不是 MFC 应用程序,而是一个 .dll,其 Platform Toolset
值也设置为 VS2013
。它是一个 x64 应用程序。
但是,当我尝试构建“Y”时,出现大量编译器错误,主要是因为该库使用了 C++11 功能,而显然 VS 不允许这样做。错误主要是 vector 括号初始化语法问题。例如。 非聚合不能用初始化列表初始化
。但除此之外,它也找不到strtoll
和report_rangecheckfailure
的符号。
但是我不明白。据我所知,VS2013 应该支持这些功能,在我的其他项目中似乎也支持。这里可能是什么问题?要使用 2013 编译器,我还需要做些什么吗?
编辑 更清楚地说,是这样的赋值给出了聚合编译器消息:
std::vector<std::string> paramVector = { "username", "time", "hours", "udata" };
最佳答案
it also can't find symbols for strtoll and report_rangecheckfailure
对潜在问题的最强烈暗示,即链接器错误。所以一个确凿的事实是显而易见的:您没有链接 VS2013 C 运行时库。这些符号存在于 C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\libmsvcrt.lib 和 libcmt.lib 中,但不存在于早期版本中,例如 VS2010 版本。
从这里开始,只需很短的一步就可以解释“无法使用初始化列表初始化非聚合”错误。显然你也不包括适当的 VS2013 <vector>
包含文件。需要获得该 vector 分配进行编译。同样,包括它的 VS2010 版本可以解释该错误。
铁一般的事实:您的 Y 项目配置不正确。
对于编译器和链接器,两者 都弄错了确实指向工具集目标设置,即使您认为它是正确的。一个标准错误是更改调试配置的设置,但忘记也为发布配置更改设置。将 Project > Properties > VC++ Directories 设置错误是另一种方法。编译器的/showIncludes 和链接器的/verbose 选项会为您提供足够的反馈来验证您的假设。如果您绝对绝望,请重新创建 Y 项目。
关于c++ - 如何启用 VS2013 c++ 编译器功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31724429/