Не линкуется прога с библиотеками Quantum GIS под Qt 4.7.0

Вопросы по свободной ГИС QGIS. Сообщения об ошибках, предложения по улучшению, локализация.
Ответить
GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Не линкуется прога с библиотеками Quantum GIS под Qt 4.7.0

Сообщение GIS-dev » 11 фев 2011, 11:34

Пробую собрать для пробы приложение Qt4 c использованием библиотек Quantum GIS.
Подключил заголовочные файлы, в файле проекта - библиотеки, задал определения CORE_EXPORT=__declspec(dllimport) GUI_EXPORT=__declspec(dllimport)

И вот что выдает линковщик:

Код: Выделить всё

g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -Wl,-s -mthreads -Wl -Wl,-subsystem,windows -o release\WaterLine.exe release/main.o release/mainwindow.o release/moc_mainwindow.o release/qrc_resource.o  -L"d:\Qt\2010.05\qt\lib" -lmingw32 -lqtmain D:\Quantum_GIS_Copiapo\apps\qgis\lib\qgis_gui.lib D:\Quantum_GIS_Copiapo\apps\qgis\lib\qgis_analysis.lib D:\Quantum_GIS_Copiapo\apps\qgis\lib\qgis_core.lib D:\Quantum_GIS_Copiapo\apps\gdal-16\lib\gdal_i.lib -lQtXml -lQtGui -lgdi32 -lcomdlg32 -loleaut32 -limm32 -lwinmm -lwinspool -lmsimg32 -lQtCore -lkernel32 -luser32 -lshell32 -luuid -lole32 -ladvapi32 -lws2_32 

mingw32-make[1]: Leaving directory `D:/TRASS6/QtProjects/GIS_Wasser/WaterLine'
mingw32-make: Leaving directory `D:/TRASS6/QtProjects/GIS_Wasser/WaterLine'

release/main.o:main.cpp:(.text+0xcb): undefined reference to `_imp___ZN14QgsApplicationC1ERiPPcb7QString'
release/main.o:main.cpp:(.text+0x11f): undefined reference to `_imp___ZN14QgsApplicationD1Ev'
release/main.o:main.cpp:(.text+0x15e): undefined reference to `_imp___ZN14QgsApplicationD1Ev'
............... и т.д. ...................
Могу только предположить, что он не видит соответствия этим функциям в файлах библиотек qgis_gui.lib, qgis_analysis.lib или qgis_core.lib... Но и заголовочные файлы, и библиотеки установились из дистрибута "Quantum GIS 1.6.0" скачанного с официального сайта. Вряд-ли они "битые". Скорее какая-то неувязка в конфигурациях. Смущают параметры CORE_EXPORT и GUI_EXPORT. Так как про них упоминается лишь вскользь, что они нужны только для Винды, а в Линуксе должны быть пустыми. Я, собирая под Windows, перебрал все их варианты, которые пришли в голову (Q_DECL_IMPORT, __declspec(dllimport), пробел), но разница лишь в том, что при задании пробела в проекте "DEFINES += CORE_EXPORT= GUI_EXPORT=" в вышеприведенном сообщении об ошибке имя функции выглядит более читабельным:

Код: Выделить всё

release/main.o:main.cpp:(.text+0xca): undefined reference to `QgsApplication::QgsApplication(int&, char**, bool, QString)'

release/main.o:main.cpp:(.text+0x11d): undefined reference to `QgsApplication::~QgsApplication()'
release/main.o:main.cpp:(.text+0x15b): undefined reference to `QgsApplication::~QgsApplication()'
release/mainwindow.o:mainwindow.cpp:(.text+0x328): undefined reference to `QgsProviderRegistry::instance(QString)'


Раньше под Qt без проблем собирал приложения с чужими библиотеками, а тут никак не выйду из тупика. Может ошибка пустяковая, но я её сути никак не уловлю.

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Не линкуется прога с библиотеками Quantum GIS под Qt 4.7

Сообщение Voltron » 11 фев 2011, 16:00

Вы, судя по приведенным ошибкам, собираете mingw, а QGIS для Windows собран в MSVC. Скорее всего, дело в декорировании имен.

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Re: Не линкуется прога с библиотеками Quantum GIS под Qt 4.7

Сообщение GIS-dev » 11 фев 2011, 18:32

Voltron писал(а):Вы, судя по приведенным ошибкам, собираете mingw, а QGIS для Windows собран в MSVC. Скорее всего, дело в декорировании имен.
Да, собираю MinGW. Думаю Вы правы. Похоже, прийдётся опробовать пляски с бубном наподобие этого... :(

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Re: Не линкуется прога с библиотеками Quantum GIS под Qt 4.7

Сообщение GIS-dev » 12 фев 2011, 19:20

Ситуация гораздо серьезней, чем я предполагал. Похоже, утилиты "reimp" и "dlltool" неспособны преобразовать библиотеки MSVC, содержащие определения С++. Тупик.
В этой связи следующий вопрос: Возможно ли заменить компилятор и линковщик в QtCreator с MinGW на cl.exe и link.exe из MSVC? Или же прийдется включать Qt-овские библиотеки в проект MSVC? Последний вариант мне бы очень не понравился, так как мне QtCreator больше по душе, чем Visual Studio...

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Не линкуется прога с библиотеками Quantum GIS под Qt 4.7

Сообщение Voltron » 12 фев 2011, 22:11


SimpleMo
Новоприбывший
Сообщения: 12
Зарегистрирован: 11 апр 2006, 15:44
Репутация: 0

Re: Не линкуется прога с библиотеками Quantum GIS под Qt 4.7

Сообщение SimpleMo » 13 фев 2011, 11:27

Передо мной стояла такая же задача, только собирал не приложение, а плагин (dll). Делал так:
1. с помощью Qt Creator создал исходники;
2. с помощью cmake скомпилировал проект MS Visual Studion Express 2008;
3. собрал dll с помощью компилятора MSVC.
Предварительно, кстати, собрал с помощью того же компилятора и сам QGIS.
Во вложении к данному посту - пример CMakeLists.txt, с которым всё сработало.

P.S. Мне думается, что делать так, как я - местами изврат, но настраивать Qt Creator, как я полагаю, займёт больше времени.
Вложения
CMakeLists.txt
(2.05 КБ) 1086 скачиваний

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Re: Не линкуется прога с библиотеками Quantum GIS под Qt 4.7

Сообщение GIS-dev » 13 фев 2011, 14:56

Раз не удаётся найти адекватное решение по интеграции компилятора MSVC в Qt Creator, может попробовать собрать QGIS из исходников в Qt Creator используя MinGW. По-идее, библиотеки при этом уже будут совместимы с MinGW? Или сборка QGIS ещё более проблемная задача чем смена компилятора? Насколько я понял, кроме исходника потребуются ещё штук семь инсталляций, то есть исходник сам по себе неполный и вообще не является проектом Qt, готовым к сборке? :x

Voltron
Гуру
Сообщения: 2627
Зарегистрирован: 29 мар 2007, 14:12
Репутация: 34
Откуда: Ukraine

Re: Не линкуется прога с библиотеками Quantum GIS под Qt 4.7

Сообщение Voltron » 13 фев 2011, 15:16

GIS-dev писал(а):Раз не удаётся найти адекватное решение по интеграции компилятора MSVC в Qt Creator, может попробовать собрать QGIS из исходников в Qt Creator используя MinGW. По-идее, библиотеки при этом уже будут совместимы с MinGW? Или сборка QGIS ещё более проблемная задача чем смена компилятора
Если собрать все одним компилятором, то проблем с декорированием имен не будет. Т.е. библиотеки «будут совместимы». Сама по себе сборка QGIS весьма простая задача. Но я бы на вашем месте собрал все при помощи MSVC, т.к. сборка в MinGW не рекомендуется самими разработчиками.
GIS-dev писал(а):Насколько я понял, кроме исходника потребуются ещё штук семь инсталляций, то есть исходник сам по себе неполный и вообще не является проектом Qt, готовым к сборке? :x
Тут вы не правы.
QGIS использует наработки других проектов, в частности GDAL, proj, GEOS. Само-собой для успешной сборки необходимы соответствующие файлы. Что касается исходников, то архив исходных текстов полный. Правда, проекта Qt там нет, т.к. сборка выполняется при помощи СMake.

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Re: Не линкуется прога с библиотеками Quantum GIS под Qt 4.7

Сообщение GIS-dev » 14 фев 2011, 08:21

Теперь новый сюрприз - не собирается Qt для MSVC:

Код: Выделить всё

        cl -c -Foproject.obj  -W3 -nologo -O2  -I. -Igenerators -Igenerators\unix -Igenerators\win32 -Igenerators\mac -Igener
ators\symbian  -ID:\Qt\2010.05\qt\include -ID:\Qt\2010.05\qt\include\QtCore  -ID:\Qt\2010.05\qt\include -ID:\Qt\2010.05\qt\in
clude\QtCore  -ID:\Qt\2010.05\qt\src\corelib\global  -ID:\Qt\2010.05\qt\src\corelib\xml  -ID:\Qt\2010.05\qt\mkspecs\win32-msv
c2003   -ID:\Qt\2010.05\qt\tools\shared  -DQT_NO_TEXTCODEC -DQT_NO_UNICODETABLES -DQT_LITE_COMPONENT -DQT_NODLL -DQT_NO_STL
-DQT_NO_COMPRESS -DUNICODE -DHAVE_QCONFIG_CPP -DQT_BUILD_QMAKE -DQT_NO_THREAD  -DQT_NO_QOBJECT -DQT_NO_GEOM_VARIANT -DQT_NO_D
ATASTREAM -DQT_NO_PCRE -DQT_BOOTSTRAPPED  -c -DSTRICT -Ow -W0 -Zp -Tp -DQMAKE_OPENSOURCE_EDITION project.cpp
cl : Command line warning D4025 : overriding '/W3' with '/W0'
cl : Command line error D2036 : '/Foproject.obj' not allowed with multiple source files
NMAKE : fatal error U1077: 'cl' : return code '0x2'
Stop.
Building qmake failed, return code 2
Если честно, я никак не пойму, где здесь "multiple source files", когда на входе единственный файл "project.cpp" :|

Перед этим configure навыдавал ещё кучу сообщений типа:

Код: Выделить всё

Не удается найти D:\Qt\2010.05\qt\qmake\qnumeric.obj
        del vc60.pdb
Не удается найти D:\Qt\2010.05\qt\qmake\vc60.pdb
        del vc70.pdb
Не удается найти D:\Qt\2010.05\qt\qmake\vc70.pdb
        del qmake.pdb
Не удается найти D:\Qt\2010.05\qt\qmake\qmake.pdb
        del qmake.ilk
Не удается найти D:\Qt\2010.05\qt\qmake\qmake.ilk
        del qmake.tds
Не удается найти D:\Qt\2010.05\qt\qmake\qmake.tds
Не знаю, должно ли так быть, или это тоже фатальные ошибки компиляции...

Причём ошибки идентичны с двумя компиляторами:
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
и
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86

PS Разве что предположить, что и тот и другой компилятор слишком старый?.. Эта версия Qt содержит такие версии Win-компиляции:

Код: Выделить всё

win32-msvc2010
win32-msvc2008
win32-msvc2005
win32-msvc2003
win32-icc
win32-g++
win32-borland
А вот что пишут в нете про мои:

Код: Выделить всё

> Visual Studio 6: CL Version 12.00.8168  MSC_VER = 1200 
>          Linker version 6.00.8477      _NMAKE_VER = 6.00.8168.0 
> 
> Visual Studio .NET: CL Version 13.00.9466  MSC_VER = 1300 
>          Linker version 7.00.9466      _NMAKE_VER = 7.0.9466 
> 
> Visual Studio .NET 2003: CL Version 13.10.3077  MSC_VER = 1310 
>          Linker vers. 7.10.3077      _NMAKE_VER = 7.10.3077 
Хотя не факт, что дело в этом...

GIS-dev
Участник
Сообщения: 54
Зарегистрирован: 27 авг 2009, 11:01
Репутация: 1

Не запускается прога с библиотеками Quntum GIS

Сообщение GIS-dev » 18 фев 2011, 09:54

Удалось сделать приложение, собрав Qt под VC2008. Теперь задача разобраться с классами и методами QGIS. Пытаюсь запустить этот пример, ничего не получается. Я даже не могу вникнуть в суть работы этого приложения. Получается, оно не использует объект класса MainWindow, а всю обработку выполняет в функции "main"? Окно создаётся где-то в недрах QGIS-библиотек? Может кто-нибудь поделиться заведомо работающим проектом такого или похожего Qt-шного туториала для QGIS?

PS Если в функции "main" указывать объект приложения QgsApplication вместо QApplication, то невозможно создать объект класса MainWindow, т. е. обычное главное окно приложения - при запуске выходит нижеприведенная ошибка. То есть эти два класса принципиально несовместимы, хотя QgsApplication должен наследоваться из QApplication. :|
Изображение

Ответить

Вернуться в «QGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя