1

私は Windows ユーザーではありませんが、QT プロジェクトを Windows に移植する手助けをしようとしています。誰かが私を正しい方向に向けるのを手伝ってくれることを願っています。

そのため、Windows 7 プロフェッショナル 32 ビット マシン (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);

どんな助けでも大歓迎です。

4

1 に答える 1

1

わかりました、これで解決しました。exiv2 は、Qt が使用していたものとは異なるバージョンの gcc でコンパイルされていることが判明しました。そのため、同じコンパイラを使用してすべてを再コンパイルする必要がありました。プロジェクトが使用しているすべてのライブラリで最も互換性のあるバージョンは 4.4 だったので、Qt-4.8.5 にダウングレードし、すべてを静的にリンクする必要がありました。

一部のマシンでは機能し、一部のマシンでは機能しない理由はまだわかりません。:)

于 2013-11-16T12:02:24.223 に答える