使用VC ++ 2010的YAML将编译为Release,但不会编译为Debug

时间:2012-01-14 18:27:36

标签: yaml-cpp

我正在尝试用C ++学习YAML,我使用CMake将给定的yaml-cpp文件用VC ++ Express 2010制作成.dll和.lib文件。我设置项目的方式与设置SFML等其他库的方式相同。

我的问题是,当我尝试构建yaml-cpp网站上给出的示例代码的发行版时,我得到:

Ogre
Dragon
Wizzard

然而,当我尝试构建一个Debug版本时,我得到:

Assertion failed: false, file d:\microsoft visual studio 10.0\vc\include\yaml-cp
p\nodeimpl.h, line 39

我不知道如何处理这件事。我是否需要构建库的调试版本?如果有,怎么样?如果我设法改变某些东西,我不知道哪个项目选项会影响这个。

当我正在编译时,我收到警告:

d:\microsoft visual studio 10.0\vc\include\yaml-cpp\conversion.h(51): warning C4146: unary minus operator applied to unsigned type, result still unsigned

有很多模板打印输出,f.e。 :

1>          d:\microsoft visual studio 10.0\vc\include\yaml-cpp\nodereadimpl.h(35) : see reference to function template instantiation 'bool YAML::ConvertScalar<T>(const YAML::Node &,T &)' being compiled
1>          with
1>          [
1>              T=unsigned int
1>          ]

这是我的问题吗?错误的CMake文件和编译?

1 个答案:

答案 0 :(得分:0)

>   yaml_test.exe!main()  Line 108  C++
    yaml_test.exe!__tmainCRTStartup()  Line 555 + 0x19 bytes    C
    yaml_test.exe!mainCRTStartup()  Line 371    C
    kernel32.dll!7c817077()     
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]

中止:

doc [i]&gt;&gt;怪物;

程序不会尝试输入重载功能。

在我自己的代码中,当我尝试使用我的第一个&gt;&gt;时,它会中断运算符,它是int中的一个构建。

我正在使用http://pastebin.com/PdKWDgQa中的代码,但对于原始的yaml-cpp示例代码,它也是如此。 Release模式下的输出是正确的,Debug停止并返回相同的断言代码。

作为参考,在&gt;&gt;中的{括号中的发布模式下调用堆栈怪物的功能看起来像这样:

>   yaml_test.exe!operator>>(const YAML::Node & node={...}, Monster & monster={...})  Line 36   C++
    yaml_test.exe!main()  Line 109  C++
    msvcr100.dll!_initterm(void (void)* * pfbegin=0x00000001, void (void)* * pfend=0x003a5050)  Line 873    C
    yaml_test.exe!__tmainCRTStartup()  Line 555 + 0x17 bytes    C
    kernel32.dll!7c817077()     
    [Frames below may be incorrect and/or missing, no symbols loaded for kernel32.dll]

编辑:

实际上,我已经重建了我使用CMake作为Debug制作的yaml-cpp项目,当我现在使用它时一切运行正常。如果这很明显,我很抱歉,我对这些问题不熟悉。