我有一个我无法弄清楚的问题。我使用OpenEXR库的项目完全适用于Linux平台。它必须在Visual Studio 2015中可编译。因此,我试图移植它。我已经成功编译并安装了OpenEXR 2.2.0版本(从official site下载instructions at GitHub)。不幸的是,我的代码遇到了几个问题。其中一个可以简化为以下小片段:
#include <OpenEXR/ImfInputFile.h>
#include <OpenEXR/ImfHeader.h>
int main(int argc, char * argv[]) {
Imf::InputFile exr_file("test.exr");
const Imf::Header & exr_header = exr_file.header();
// e.g. this fails at debug assertion: map/set iterators incompatible
bool test1 = exr_header.begin() != exr_header.end();
// or this gets stuck somehow and consuming CPU, the program doesn't continue
bool test2 = exr_header.begin() != exr_header.begin();
return 0;
}
当它在发布模式下编译时似乎没问题(至少对于代码片段,我的项目还有其他一些我怀疑是相关的问题)。但是在Debug模式中,我需要调试我的项目,会发生奇怪的事情。第一个测试以调试断言结束:
Debug Assertion Failed!
Program: C:\WINDOWS\SYSTEM32\MSVCP140D.dll
File: c:\program files (x86)\microsoft visual studio 14.0\vc\include\xtree
Line: 326
Expression: map/set iterators incompatible
第二个(当第一个被注释掉时)被卡住了,程序似乎处于无限循环中。我不明白为什么。
拜托,有人可以帮帮我吗?如果重要的话,我将使用Visual Studio Community 2015。