我正在拼命地尝试在 Windows 上使用 Qt(用于 GUI)和 exiv2(用于 EXIF 数据)以及 QtCreator 作为 IDE 从 JPG 图片中获取焦距。我完成了这个文档齐全的库的所有构建过程,它为我提供了一些用于动态链接的 .dll。因为我在 QtCreator gui 中使用 32 位 mingw,所以 dll 是 32 位构建的。使用 Visual Studio 构建库时没有错误,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_x32;.pro 文件包含此内容,以及头文件和源文件:
win32: LIBS += -L$$PWD/exiv2_x32/ -lexiv2
INCLUDEPATH += $$PWD/exiv2_x32
DEPENDPATH += $$PWD/exiv2_x32
但是当我尝试编译我的代码时,无论我多么努力,我都会得到相同的输出,“Exiv2 尚未声明”,“预期';' 在“图像”之前,等等,尽管我执行了 qmake 没有错误。为什么?
我是 C++ 的新手,所以我可能错过了一两件重要的事情,或者我对动态链接的理解可能是错误的。但我真的,真的需要帮助。我不敢相信我这么难得到一个焦距。
PS:当我尝试链接静态库时,链接器说它找不到“exiv2.a”的目标。