Я не пользователь Windows, но я пытаюсь помочь перенести проект QT в Windows, который сталкивается с некоторыми довольно странными проблемами (для меня, во всяком случае). Я надеюсь, что кто-то может помочь направить меня в правильном направлении.
Таким образом, я могу успешно построить проект на 32-битной машине под управлением Windows 7 professional (QT 5.1.1, MinGW 4.8.1, exiv2). Хотя все работает на сборочной машине, на некоторых машинах происходит сбой программы (на данный момент она работает на 64-битной Windows 7 Professional и на другой 32-битной Windows 7), но работает на других. Сообщение о сбое не так уж полезно, так как это общая ошибка StackHash / APPCRASH. Я попытался изменить настройки DEP, но это было бесполезно (и я не уверен, что приму это как «решение»). Я сузил место, где происходит сбой (к счастью, это соответствует), и ниже приведен пример фрагмента (прочитайте файлы jpeg в папке и напечатайте их метку времени).
Вызов любой функции в exiv2 (exiv2-12.dll) вызовет сбой программы
Exiv2::Image::AutoPtr exiv = Exiv2::ImageFactory::open(imagePath);
exiv->readMetadata();
Exiv2::ExifData data = exiv->exifData();
Exiv2::Value::AutoPtr v = Exiv2::Value::create(Exiv2::asciiString);;
if (data.findKey(dateTimeOriginal) != data.end())
v = (data.findKey(dateTimeOriginal))->getValue();
else if (data.findKey(dateTimeDefault ) != data.end())
v = (data.findKey(dateTimeDefault ))->getValue();
QString dateTime(v->toString().c_str());
this->ui->plainTextEdit->appendPlainText("\n" + dateTime);
Любая помощь будет очень высоко ценится.
Хорошо, я решил это. Оказалось, что exiv2 был скомпилирован с версией gcc, отличной от той, что использовала Qt. Итак, мне пришлось перекомпилировать все, используя один и тот же компилятор. Наиболее совместимой версией была 4.4 для всех библиотек, которые использует проект, поэтому мне пришлось перейти на Qt-4.8.5 и связать все статически.
Я все еще не уверен, почему это будет работать на некоторых машинах, а не на некоторых, хотя. 🙂
Других решений пока нет …