QT / exiv2应用程序在某些Windows计算机上崩溃

时间:2013-11-13 20:41:33

标签: c++ windows qt exiv2

我不是Windows用户,但我正在尝试帮助将QT项目移植到Windows中,这些问题遇到了一些相当奇怪的问题(无论如何)。我希望有人可以帮助我指出正确的方向。

因此,我可以在Windows 7专业32位机器(QT 5.1.1,MinGW 4.8.1,exiv2)上成功构建项目。虽然一切都在构建机器上运行,但程序在某些机器上崩溃(到目前为止,它在64位Windows 7专业版和另外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);

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

好的,我已经解决了这个问题。事实证明,exiv2是使用与Qt使用的不同版本的gcc编译的。所以,我不得不使用相同的编译器重新编译所有内容。对于项目正在使用的所有库,最兼容的版本是4.4,因此我不得不降级到Qt-4.8.5并静态链接所有内容。

我仍然不确定为什么它会在某些机器上运行而不是在某些机器上运行。 :)