Qt不会使用exiv2.dll编译项目

时间:2014-12-05 13:16:42

标签: c++ qt qmake qtgui exiv2

我正在拼命尝试在Windows上使用Qt(用于GUI)和exiv2(用于EXIF数据)以及QtCreator作为IDE从JPG图片获得焦距。我浏览了这个记录良好的库的所有构建,它给了我一些动态链接的.dll。 dll是用32位构建的,因为我在QtCreator gui中使用32位mingw。使用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尚未被宣布”,“预期”;'在'image'之前,等等,虽然我没有错误地执行了qmake。为什么呢?

我是C ++的新手,所以我可能错过了一两件重要的事情,或者我对动态链接的理解可能是错误的。但我真的非常需要帮助。我无法相信我很难获得焦距。

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

1 个答案:

答案 0 :(得分:0)

如果标题在$$PWD/exiv2_x32中可用,那么您可能会犯一些可怜的错误,例如包括:

#include "image.hpp"

或与你的包含警卫等搞砸了