Russian Qt Forum
Август 18, 2017, 21:13 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите соединить Qt и GDAL  (Прочитано 261 раз)
swbor
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« : Август 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 ругается.
Записан
Swa
Самовар
**
Offline Offline

Сообщений: 152


Просмотр профиля
« Ответ #1 : Август 09, 2017, 23:09 »

Когда вы линкуете библиотеку не нужно писать "lib" перед её названием, т.е. должно быть
Код:
LIBS += -lgdal-20

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

Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #2 : Август 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-файлом. Сейчас буду пытаться выяснить какой именно)
« Последнее редактирование: Август 10, 2017, 10:41 от swbor » Записан
ssoft
Частый гость
***
Offline Offline

Сообщений: 228


Просмотр профиля
« Ответ #3 : Август 10, 2017, 11:35 »

http://www.dependencywalker.com/ в помощь  Подмигивающий
Записан
swbor
Новичок

Offline Offline

Сообщений: 7


Просмотр профиля
« Ответ #4 : Август 10, 2017, 11:51 »

Спасибо,где-то уже про него слышал, скачаю)
После, он поругался на libiconv-2.dll - нашел в наборе mingw - добавил ее. Поругался на libstdc++-6.dll - не найдена точка входа. - заменил на такую же из папки mingw/bin. - и все заработало, в том числе при запуске из под qt-creator. Улыбающийся
Итого, ему не хватало какой-то другой библиотеки рядом с exe-файлом. Сейчас буду пытаться выяснить какой именно)
Экспериментальным путем выяснил, что также необходимо класть в папку с исполняемым файлом помимо gdal-20.dll еще и  libstdc++-6.dll и libiconv-2.dll из mingw/bin - mingw тот который отдельно устанавливается и с помощью которого собирается библиотека . Без это не запускается никак. Два дня танцев с бубном вокруг кода, самой сборки и собранной библиотеки и проблема решена свежим взглядом с утра с другого угла Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Страница сгенерирована за 0.061 секунд. Запросов: 22.