Qt не будет компилировать проект с использованием exiv2.dll
Я отчаянно пытаюсь получить фокусное расстояние из изображения 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".
1 ответ
Если заголовки доступны в $$PWD/exiv2_x32
, тогда вы, вероятно, допустили некоторые жалкие ошибки, такие как:
#include "image.hpp"
или напутал с включенными охранниками и т. д.