У меня есть проблема, которую я не могу понять. Мой проект с использованием библиотеки OpenEXR отлично работает на платформе Linux. Он также должен быть компилируемым в Visual Studio 2015. Поэтому я пытаюсь его портировать. Я успешно скомпилировал и установил релиз OpenEXR 2.2.0 (скачанный с официальный сайт, следующий инструкции на 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;
}
Когда он скомпилирован в режиме Release, он кажется нормальным (по крайней мере для фрагмента, у моего проекта есть другие проблемы, которые, я подозреваю, связаны) Но в режиме отладки, который мне нужен для отладки моего проекта, происходят странные вещи. Первый тест заканчивается отладочным утверждением:
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, если это имеет значение.
Задача ещё не решена.
Других решений пока нет …