C++ Qt-won';t使用exiv2.dll编译项目

C++ Qt-won';t使用exiv2.dll编译项目,c++,qt,qmake,qtgui,exiv2,C++,Qt,Qmake,Qtgui,Exiv2,我正在拼命尝试在Windows上使用Qt(用于GUI)和exiv2(用于EXIF数据)以及QtCreator作为IDE从JPG图片中获取焦距。我浏览了这个文档丰富的库的所有构建过程,它为我提供了一些动态链接的.dll。 DLL是32位构建的,因为我在QtCreator gui中使用32位mingw。使用VisualStudio构建库时没有错误,DLL不是空的,等等 下面是使用exiv2的类的构造函数的代码,其中focalLength是一个静态属性,img是另一个属性,path是一个QString

我正在拼命尝试在Windows上使用Qt(用于GUI)和exiv2(用于EXIF数据)以及QtCreator作为IDE从JPG图片中获取焦距。我浏览了这个文档丰富的库的所有构建过程,它为我提供了一些动态链接的.dll。 DLL是32位构建的,因为我在QtCreator gui中使用32位mingw。使用VisualStudio构建库时没有错误,DLL不是空的,等等

下面是使用exiv2的类的构造函数的代码,其中focalLength是一个静态属性,img是另一个属性,path是一个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\u x32;.pro文件包含以下内容,以及标题和源文件:

win32: LIBS += -L$$PWD/exiv2_x32/ -lexiv2
INCLUDEPATH += $$PWD/exiv2_x32
DEPENDPATH += $$PWD/exiv2_x32
但是,当我尝试编译代码时,无论我如何努力,我都会得到相同的输出,“Exiv2尚未声明”、“预期”、“在“image”之前”等等,尽管我执行qmake时没有错误。为什么?

<>我是C++新手,所以我可能错过了一两件重要的事情,或者我对动态链接的理解可能是错误的。但我真的,真的需要帮助。我真不敢相信,要获得焦距对我来说这么难


PS:当我尝试链接静态库时,链接器说它找不到“exiv2.a”的目标

如果标题在
$$PWD/exiv2_x32
中可用,那么您可能犯了一些令人遗憾的错误,例如:

#include "image.hpp"

或者搞乱了你的include-guard,等等。

我希望如果你要使用mingw,你需要用mingw而不是visual studio来构建
exiv2
。好主意,我要试试这个。哦,好吧,我必须包含标题。当然我忘了在使用visual studio编译后没有找到它们。谢谢哇,我的代码太糟糕了。我道歉。