Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: PavelDart от Ноябрь 05, 2009, 21:03



Название: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 05, 2009, 21:03
Почитал wiki - образовался вопрос, ответ на него пока не нашёл.
Вот имеется у меня сейчас сконфигурированная на релиз и дебаг версия qt4. Получается она динамическая, так как -static параметр я не указывал.
Мне нужна ещё и статическая сборка.
Вот, к примеру, есть у меня проект, пока без про-файла. Каким способом будет происходить выбор сборки? Заменой путей? Как эти две сборки будут уживаться друг с другом?



Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: Igors от Ноябрь 05, 2009, 21:29
Это определяется файлами библиотеки которые подключены к проекту. Если библиотека содержит сами функции - статически. Но может содержать только вызовы из другого модуля - динамически.


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: lit-uriy от Ноябрь 05, 2009, 21:33
Вариант для IDE (http://www.prog.org.ru/topic_11098_0.html) - переключение настроек проекта

Вариант без IDE (http://www.wiki.crossplatform.ru/index.php/Сборка_Qt_с_использованием_MinGW32#.D0.9F.D1.80.D0.B5.D0.B4.D0.B8.D1.81.D0.BB.D0.BE.D0.B2.D0.B8.D0.B5) - переключение окружения


Название: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 05, 2009, 22:34
Получается вот что,
был бы Creator или Integrator то проблемы с перенастройкой не было бы.
В отсутствие их переключение производится заменой путей.
Вроде бы ничего сложного.
Надо проверить.


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 06, 2009, 00:31
Собралась статическая сборка.
Не меняя переменных окружения (соответственно п.о. выставил перед установкой статической сборки)
[PavelDart] C:\Qt\projects\first$ echo %path%
С:\MinGW\bin;C:\MinGW\mingw32\bin;
E:\Qt\4.3.4\bin; - адрес стат. сборки
O:\oraclexe\app\oracle\product\10.2.0\server\bin;
O:\app\PavelDart\product\11.1.0\db_1\bin;
C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\MySQL\Server\bin;
c:\MySQL\Server\include;
скомпилировал helloworld - компилируется debug and release версией. Образуются три макфайла, две папки. Приложение без dll работать отказывается.


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: lit-uriy от Ноябрь 06, 2009, 00:36
>>Приложение без dll работать отказывается.
без которой?


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 06, 2009, 08:43
>>Приложение без dll работать отказывается.
без которой?

Когда имелась только динамическая сборка требовалось 3 dll:
mingwm10.dll
QtCore4.dll
QtGui4.dll

Сейчас программа не запускается только без mingwm10.dll
Вот эту строчку из Makefile.Release извлёк:
-DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN





Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: Joss от Ноябрь 06, 2009, 12:38
Вы плохо изучили wiki, там есть описание сборки без mingwm10.dll

Добавить в файле <QTDIR>\mkspecs\win32-g++\qmake.conf
в строчку QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc ключ -static


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: lit-uriy от Ноябрь 06, 2009, 18:30
PavelDart, Может оказаться полезным - тык (http://www.forum.crossplatform.ru/index.php?showtopic=3696)


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 06, 2009, 19:38
Вы плохо изучили wiki, там есть описание сборки без mingwm10.dll

Добавить в файле <QTDIR>\mkspecs\win32-g++\qmake.conf
в строчку QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc ключ -static

Нашёл эти строки:
QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads -Wl
QMAKE_LFLAGS_EXCEPTIONS_OFF =

Не повлияет?

PavelDart, Может оказаться полезным - тык (http://www.forum.crossplatform.ru/index.php?showtopic=3696)

Лишним не будет.
---
Сейчас опробовал:
Добавить в файле <QTDIR>\mkspecs\win32-g++\qmake.conf
в строчку QMAKE_LFLAGS = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc ключ -static
[/quote]

пробовал в 2 вариантах:
QMAKE_LFLAGS      = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc-static
и
QMAKE_LFLAGS      = -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc,-static

Всё то же - ищет mingwm10.dll


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: lit-uriy от Ноябрь 06, 2009, 20:44
ты по моей ссылке второе сообщение почитай (самый первый ключ, который у поминает человек)


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 06, 2009, 21:47
ты по моей ссылке второе сообщение почитай (самый первый ключ, который у поминает человек)

Да, обратил внимание. Надеялся без пересборки обойдётся.  :) На сколько помню, у меня вот это было:
configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg
 


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: lit-uriy от Ноябрь 06, 2009, 22:25
>>На сколько помню, у меня вот это было
Точно можно посмотреть в файле configure.cache


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 06, 2009, 23:00
Собирал qt под виндой собственно для реализации приложения, связанного с Mysql, но в данную конфигурацию поддержку не включил. Ещё понадобится доступ к Oracle 10g. По этому, буду пересобирать qt, но есть подводные камни.
Вот пример:
-qt-sql-<driver>

В PATH пути к папкам bin имеются, по этому, наверное прописывать их ключём -I не надо. Или надо?
Так как надо подключить два драйвера, то, полагаю, подстрока параметров configure.exe будет выглядеть так:
-qt-sql-QMYSQL  -qt-sql-QOCI


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 09, 2009, 22:15
Уважаемые, подскажите, пожалуйста, какие файлы должны быть в директориях, чтобы поддежка mysql и oracle была?


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: lit-uriy от Ноябрь 10, 2009, 02:08
>>-qt-sql-QMYSQL  -qt-sql-QOCI
к слову сказать таких ключей нет, с большими буквами:
Код
DOS
   -no-sql-<driver> ... Disable SQL <driver> entirely, by default none are
                        turned on.
   -qt-sql-<driver> ... Enable a SQL <driver> in the Qt Library.
   -plugin-sql-<driver> Enable SQL <driver> as a plugin to be linked to at run
                        time.
                        Available values for <driver>:
                          mysql
                          psql
                          oci
                          odbc
                          tds
                          db2
+                         sqlite
                          sqlite2
                          ibase
                        (drivers marked with a '+' have been detected as
                        available on this system)
 
все буковки маленькие, и буквы "Q" в начале тоже нет


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 11, 2009, 21:06
К вопросу об статической сборке:

Проверяю доступность СУБД утилитой sqlbrowser - доступно только QSqlile и QSqlODBC.
Думал в переменных окружения дела запустил вот этот батник:

@set PATH=C:\MinGW\bin;C:\MinGW\mingw32\bin;E:\Qt\4.3.4\bin;%PATH%
@set INCLUDE=C:\MinGW\include;C:\MySQL\Server\include;O:\oraclexe\app\oracle\product\10.2.0\server\OCI\include;%INCLUDE%
@set LIB=C:\MinGW\lib;C:\MySQL\Server\lib\opt;O:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;%LIB%
@set MINGWDIR=C:\MinGW;%MINGWDIR%
@set QMAKESPEC=win32-g++


Тут же проверил в sqlbrowser - прежняя картина.


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: lit-uriy от Ноябрь 12, 2009, 04:43
а почему в батнике нет пути к Мускулю в переменной окружения PATH?


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 12, 2009, 07:33
а почему в батнике нет пути к Мускулю в переменной окружения PATH?

Путь до папки bin MySQL храниться в path постоянно.


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: lit-uriy от Ноябрь 12, 2009, 09:35
попробуй разные сборки sqlbrowser'а запускать (релиз и отладку) будет ли разница?


Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 12, 2009, 13:41
попробуй разные сборки sqlbrowser'а запускать (релиз и отладку) будет ли разница?

make debug
Welcome to Darwin!
C:\MinGW\bin\..\lib\gcc\mingw32\3.4.2\..\..\..\..\mingw32\bin\ld.exe: cannot find -lqtmaind
collect2: ld returned 1 exit status
mingw32-make[1]: *** [debug\sqlbrowser.exe] Error 1
mingw32-make[1]: Leaving directory `E:/Qt/4.3.4/demos/sqlbrowser'
mingw32-make: *** [debug] Error 2

 [PavelDart] E:\Qt\4.3.4\demos\sqlbrowser$
 [PavelDart] E:\Qt\4.3.4\demos\sqlbrowser$ echo %path%
C:\MinGW\bin;C:\MinGW\mingw32\bin;E:\Qt\4.3.4\bin;O:\oraclexe\app\oracle\product\10.2.0\server\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\MySQL\Server\bin;c:\MySQL\Server\include

 [PavelDart] E:\Qt\4.3.4\demos\sqlbrowser$ echo %lib%
C:\MinGW\lib;C:\MySQL\Server\lib\opt;O:\oraclexe\app\oracle\product\10.2.0\server\OCI\lib\MSVC;

 [PavelDart] E:\Qt\4.3.4\demos\sqlbrowser$




Название: Re: Статическая и Динамическая - Две хозяйки на одной кухне.
Отправлено: PavelDart от Ноябрь 12, 2009, 14:00
Решил пересобрать:
configure -static -release -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libjpeg -qt-sql-mysql -qt-sql-oci

Перед конфигурированием получил вот:
WARNING: Qt does not support compiling the Oracle database driver with
MinGW, due to lack of such support from Oracle. Consider disabling the
Oracle driver, as the current build will most likely fail.


Позже:
WARNING: Failure to find: drivers\oci\qsql_oci.cpp
WARNING: Failure to find: drivers\oci\qsql_oci.h
WARNING: Failure to find: drivers\oci\qsql_oci.cpp
WARNING: Failure to find: drivers\oci\qsql_oci.h


Тоесть, исходники драйвера oci надо отдельно находить?

И ещё в результате сборки:
kernel\qsqldatabase.cpp:62:37: ../drivers/oci/qsql_oci.h: No such file or directory
kernel\qsqldatabase.cpp: In member function `void QSqlDatabasePrivate::init(const QString&)':
kernel\qsqldatabase.cpp:725: error: `QOCIDriver' has not been declared
mingw32-make[2]: *** [tmp/obj/release_static/qsqldatabase.o] Error 1
mingw32-make[2]: Leaving directory `E:/Qt/4.3.4/src/sql'
mingw32-make[1]: *** [release] Error 2
mingw32-make[1]: Leaving directory `E:/Qt/4.3.4/src/sql'
mingw32-make: *** [sub-sql-make_default] Error 2