Название: Статическая и Динамическая - Две хозяйки на одной кухне. Отправлено: 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
к слову сказать таких ключей нет, с большими буквами: Код все буковки маленькие, и буквы "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 |