c++ - QT/exiv2 应用程序在某些 Windows 机器上崩溃

标签 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);

如有任何帮助,我们将不胜感激。

最佳答案

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

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

关于c++ - QT/exiv2 应用程序在某些 Windows 机器上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963904/

相关文章:

c++ - 将秒(时钟)转换为十进制格式

c# - 所有 Windows 计算机都有且无法更改的 ID 或序列号

c++ - O(n^m) 复杂度的递归算法。

c++ - 在套接字 C++ 中选择不起作用

c++ - 是否可以在运行时更改 Qt 上的语言

windows - 使用 CredSpec 的经典 ASP/MSSQL 身份验证问题

php - Unicode setlocale 和 strftime 在 Windows 上失败

python - PyQT中事件的识别源

c++ - Qt:显示实时视频,一次一帧

c# - 以 C/C++ 作为后端的 WinForms 或 WPF 或 Qt for Windows GUI