我拼命试图在Windows上使用Qt(用于GUI)和exiv2(用于EXIF数据)从JPG图片中获取焦距,以及QtCreator作为IDE。我仔细阅读了这个文档齐全的库的所有内容,为动态链接提供了一些.dll。dll是内置32位的,因为我在QtCreator gui中使用32位的mingw。使用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时没有错误,但在'image'“之前等。为什么?
我是C ++的新手,所以我可能错过了一两个重要的事情,否则我对动态链接的理解可能是错误的。但是我真的非常需要这里的帮助。我无法相信我很难获得焦距。
PS:当我尝试链接静态库时,链接器说找不到“ exiv2.a”的目标。
如果标头在中可用$$PWD/exiv2_x32
,那么您可能会犯了一些可惜的错误,例如:
#include "image.hpp"
或弄乱了您的包括后卫等。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句