1

WindowsでQt(GUI用)とexiv2(EXIFデータ用)の両方に加えて、IDEとしてQtCreatorを使用して、JPG画像から焦点距離を必死に取得しようとしています。この非常によく文書化されたライブラリのすべての構築を行った結果、動的リンク用の .dll が得られました。QtCreator GUIで32ビットのmingwを使用しているため、dllは32ビットで構築されています。Visual Studio でライブラリをビルドするときにエラーは発生しませんでした。dll は空ではありません。

exiv2 を使用するクラスのコンストラクターのコードは次のとおりです。ここで、focalLength は静的属性であり、img は別の属性であり、QString をパスします。

img=new QImage(path);
std::string stdPath=path.toStdString();
if(!focalLength)
{
    Exiv2::Image::AutoPtr image = Exiv2::ImageFactory::open(stdPath);
    image->readMetadata();
    Exiv2::ExifData &exifData = image->exifData();
    Exiv2::ExifKey key(Exif.Image.FocalLength);
    Exiv2::ExifData::const_iterator pos = exifData.findKey(key);
    if(pos!=exifData.end())
        focalLength=(double)pos->getValue();
    else
        focalLength(0);
}

ライブラリ (exiv2.dll および exiv2.lib) は (projectPath)\exiv2_x32 にあります。.pro ファイルには、これに加えて、ヘッダーとソース ファイルが含まれています。

win32: LIBS += -L$$PWD/exiv2_x32/ -lexiv2
INCLUDEPATH += $$PWD/exiv2_x32
DEPENDPATH += $$PWD/exiv2_x32

しかし、コードをコンパイルしようとすると、どんなに頑張っても同じ出力が得られます。「Exiv2 は宣言されていません」、「期待される ';' before 'image'" など、qmake を実行してもエラーは発生しませんでした。なんで?

私は C++ の初心者なので、重要なことを 1 つか 2 つ見落としているか、動的リンクの理解が間違っている可能性があります。しかし、私は本当に、本当にここで助けが必要です. 焦点距離を合わせるのがこんなに難しいなんて信じられない。

PS:代わりに静的ライブラリをリンクしようとすると、リンカーは「exiv2.a」のターゲットが見つからないと言います。

4

1 に答える 1