2014-12-05 8 views
1

Я отчаянно пытаюсь получить фокусное расстояние от изображения JPG с использованием как Qt (для графического интерфейса), так и exiv2 (для данных EXIF) в Windows, плюс QtCreator как IDE. Я прошел через все здание этой настолько хорошо документированной библиотеки, которая дала мне некоторую .dll для динамической компоновки. DLL-файлы построены на 32 бита, так как я использую 32-битный бит в QtCreator gui. Не было ошибок при создании библиотек с визуальной студией, DLL не пуст и т. Д.Qt не будет компилировать проект с использованием exiv2.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 не был объявлен», «ожидаемый»; перед «изображением» и т. д., хотя я выполнил qmake без ошибок. Зачем?

Я новичок на C++, поэтому я, возможно, пропустил важную вещь или два, или мое понимание динамической связи может быть неправильным. Но мне действительно нужна помощь здесь. Я не могу поверить, что мне так сложно получить фокусное расстояние.

PS: Когда я пытаюсь связать статические библиотеки, компоновщик говорит, что не может найти цель для «exiv2.a».

+0

я бы ожидать, что если вы собираетесь для использования mingw вам нужно построить 'exiv2' с mingw не визуальной студией. – drescherjm

+0

Хорошо, я собираюсь попробовать это. –

+0

Ну ладно, мне пришлось включать заголовки. Конечно. Я забыл, что не нашел их после компиляции с визуальной студией. Благодаря ! –

ответ

0

Если заголовки доступны в $$PWD/exiv2_x32, то вы, вероятно, сделал некоторые жалкие ошибки, как в том числе:

#include "image.hpp" 

или перепутались с включают охранников и т.д.

+0

для стыда. Благодаря ;) –