我正在拼命尝试在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”的目标。
答案 0 :(得分:0)
如果标题在$$PWD/exiv2_x32
中可用,那么您可能会犯一些可怜的错误,例如包括:
#include "image.hpp"
或与你的包含警卫等搞砸了