我拼命尝试在Windows上使用Qt(用于GUI)和exiv2(用于EXIF数据)从JPG图片获得焦距,以及QtCreator作为IDE。我仔细阅读了这个文档齐全的库的所有内容,为动态链接提供了一些.dll。
由于我在QtCreator gui中使用32位mingw,因此dll是用32位构建的。使用Visual Studio构建库时没有错误,dll不为空,等等。

这是使用exiv2的类的构造函数的代码,其中focusLength是静态属性,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尚未声明”,“期望';”都得到相同的输出。在“图像”之前”等,尽管我执行qmake时没有错误。为什么?

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

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

最佳答案

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

#include "image.hpp"


或弄乱了您的包括后卫等

10-06 15:34