Russian Qt Forum

Qt => Дополнительные компоненты => Тема начата: swbor от Август 09, 2017, 20:46



Название: Помогите соединить Qt и GDAL
Отправлено: swbor от Август 09, 2017, 20:46
Сижу под Windows. Пользуюсь Qt 5.6.1 с Mingw скачанный с оф сайта.. Безуспешно пытаюсь прикрутить GDAL 2.2.1.
Скачал исходники GDAL c оф сайта, скачал mingw с помощью онлайн-инсталятора.
Распаковал GDAL и натравил на него msys набрав:
Код:
./configure
make
make install
Долго собиралось все и в папке MinGW\msys\1.0\local\
образовались 4 папки, в которых были найдены  в папке lib: libgdal.la, libgdal.a, libgdal.dll.a
+файл libgdal-20.dll в папке bin(там же куча exe-файлов) и инклюды в отдельной папке.
В файле проекта прописал
Код:
LIBPATH+= c:/Programming/GDAL/Maked/lib/
LIBS += -llibgdal-20
INCLUDEPATH += c:/Programming/GDAL/Maked/include
В mainwindow.h подключил
Цитировать
#include "gdal.h"
#include "gdal_priv.h"
В конструктор формы добавил
Цитировать
GDALDataset  *poDataset;
GDALAllRegister();
У меня все собралось, но при запуске с дебагом пишет During startup program exited with code 0xc0000135
Файл с библиотекой libgdal-20.dll клал и в папку где генерится exe файл и в папку выше и в windows и в system32 и в папку с самой либой. Менял всячески название dll файла на gdal, gdal_i и т.п. - ничего не помогает. Если что вообще ничего не понимаю ни в динамических библиотеках, ни в в их сборке, опыта нет,хотя с qt дружу - очень нравится система. Помогите пожалуйста советом что надо поправить, чтобы GDAL заработал? Только поподробней расписывайте плиз, я в этих делах неопытный совсем.
Пробовал еще использовать MSYS2 - там даже собрать библиотеку не получилось, на ./autogen.sh ругается.


Название: Re: Помогите соединить Qt и GDAL
Отправлено: Swa от Август 09, 2017, 23:09
Когда вы линкуете библиотеку не нужно писать "lib" перед её названием, т.е. должно быть
Код:
LIBS += -lgdal-20

Также эта dll должна лежать в папке с вашим exe файлом.


Название: Re: Помогите соединить Qt и GDAL
Отправлено: swbor от Август 10, 2017, 10:39
Когда вы линкуете библиотеку не нужно писать "lib" перед её названием, т.е. должно быть
Код:
LIBS += -lgdal-20

Также эта dll должна лежать в папке с вашим exe файлом.
Спасибо за ответ! Он натолкнул меня на мысль как решить проблему. Оказывается я искал не совсем там.
Во первых я прописал подключение
Цитировать
LIBS += -lgdal
с -20 на конце не работало вообще, он библиотеку не видел.
Но само по себе это ничего не изменило. Тогда, я решил скомпилировать Релиз-версию и запустить экзешник напрямую, без использования qtcreator. Естественно, он стал ругаться на отсутствующие библиотеки. Я воспользовался qtwindeploy - добавил недостающие. После, он поругался на libiconv-2.dll - нашел в наборе mingw - добавил ее. Поругался на libstdc++-6.dll - не найдена точка входа. - заменил на такую же из папки mingw/bin. - и все заработало, в том числе при запуске из под qt-creator. :)
Итого, ему не хватало какой-то другой библиотеки рядом с exe-файлом. Сейчас буду пытаться выяснить какой именно)


Название: Re: Помогите соединить Qt и GDAL
Отправлено: ssoft от Август 10, 2017, 11:35
http://www.dependencywalker.com/ в помощь  ;)


Название: Re: Помогите соединить Qt и GDAL
Отправлено: swbor от Август 10, 2017, 11:51
http://www.dependencywalker.com/ в помощь  ;)
Спасибо,где-то уже про него слышал, скачаю)
После, он поругался на libiconv-2.dll - нашел в наборе mingw - добавил ее. Поругался на libstdc++-6.dll - не найдена точка входа. - заменил на такую же из папки mingw/bin. - и все заработало, в том числе при запуске из под qt-creator. :)
Итого, ему не хватало какой-то другой библиотеки рядом с exe-файлом. Сейчас буду пытаться выяснить какой именно)
Экспериментальным путем выяснил, что также необходимо класть в папку с исполняемым файлом помимо gdal-20.dll еще и  libstdc++-6.dll и libiconv-2.dll из mingw/bin - mingw тот который отдельно устанавливается и с помощью которого собирается библиотека . Без это не запускается никак. Два дня танцев с бубном вокруг кода, самой сборки и собранной библиотеки и проблема решена свежим взглядом с утра с другого угла ;D