Я отчаянно пытаюсь получить фокусное расстояние из изображения JPG, используя как Qt (для GUI), так и exiv2 (для данных EXIF) в Windows, плюс QtCreator в качестве IDE. Я прошел через все построение этой хорошо документированной библиотеки, которая дала мне несколько DLL для динамической компоновки.
DLL собраны в 32 бита, так как я использую 32-битный Mingw в графическом интерфейсе QtCreator. При сборке библиотек в Visual Studio не было ошибок, библиотеки не пустые и т. Д.
Вот код конструктора класса, использующего 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 не был объявлен», «ожидается»; перед «образом» и т. д., хотя я выполнил qmake без ошибок Зачем?
Я новичок в C ++, поэтому, возможно, я пропустил одну-две важные вещи, иначе моё понимание динамической компоновки могло быть неправильным. Но мне действительно очень нужна помощь. Я не могу поверить, что мне так сложно получить фокусное расстояние.
PS: когда я пытаюсь связать статические библиотеки, компоновщик говорит, что не может найти цель для exiv2.a.
Если заголовки доступны в $$PWD/exiv2_x32
, тогда вы, вероятно, допустили некоторые жалкие ошибки, такие как:
#include "image.hpp"
или напутал с включенными охранниками и т. д.