Russian Qt Forum
Ноябрь 06, 2024, 03:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: 4.2.3 статически со стат. MSVCRT из сырцов с нуля  (Прочитано 21765 раз)
Tertium Organum
Гость
« : Апрель 05, 2007, 15:17 »

Надеюсь, это не выглядит как спам. Просто только недавно я делал топик по 4.2.0. Но там было несколько криво. Не ручаюсь, что здесь все наилучшим способом делается, но это работает, и на это ушло вобщем два дня.
Итак:

0. слили с того-что-нельзя-называть-дабы-не-упоминать-о-неупоминаемом-имя-которого-мы-не-произносим-вслух qt-win-commercial-src-4.2.3.zip

1. скопировали исходники в c:\qt\4.2.3

2. Создали файл .qt-license в Documents and Settings\<user name>\

3. Вписали в него:
# Qt license file (Created by the binary installer)
LicenseID="XXXXXXXXX"
Licensee="<user name>"
LicenseKeyExt=XXXXXXX-XXXXXXX-XXX-XXXXXXX-XXXXXX-XXXXXX-XXXX

генератор найти не составит труда

4.Находим C:\Qt\4.2.3\mkspecs\win32-msvc2005\qmake.conf. Правим в нем, чтобы линковать к кутешным либам MSVCRT статически:

QMAKE_CFLAGS_RELEASE   = -O2 -MD
QMAKE_CFLAGS_DEBUG   = -Zi -MDd
      
на

QMAKE_CFLAGS_RELEASE   = -O2 -MT
QMAKE_CFLAGS_DEBUG   = -Zi -MTd

Находим строку типа «CONFIG   += qt warn_on release...» и убираем в ее конце директивы embed_manifest_dll и embed_manifest_exe


5. C:\Qt\4.2.3\projects.pro комментарим строку:
  # SUBDIRS += demos examples

6. Запускаем Пуск –> Microsoft Visual Studio 2005 ->Visual Studio Tools ->Visual Studio 2005 Command Prompt и пишем в ней:
cd c:\qt\4.2.3
configure -debug-and-release -static -qt-libjpeg -qt-zlib -qt-gif -no-qt3support
ждем, пока не напишет что теперь можно пускать nmake. Однако не nmake пускаем пока.

7. Заходим в папку C:\Qt\4.2.3\src\, открываем в студии src.sln. Выделяем все проекты с шифтом, заходим в
Properties -> C/C++ -> Output files -> Program database file name
Задаем строку: $(TargetDir)$(TargetName).pdb
Теперь, если нужны будут pdb файлы (чтобы можно было в отладке свободно ходить), надо будет в студии сделать нужным
либам Rebuild Selected. По месту создадутся одноименные либам pdbшники, а не как по дефолту vc8.
Целиком собирать в студии я не стал, проще было воспользоваться nmake.

8. Компилим moc, rcc, uic. Без них сборка nmake'ом невозможна. В c:\qt\4.2.3\bin должны появиться соотв. экзешники.
Студию не закрываем.

9. Если нужно не все, а только сама QT и тулзы, делаем простой батничек в c:\qt\4.2.3\, например, mybuild.bat :
nmake sub-src
nmake sub-tools

10. В консоли мокрософта пишем:
mybuild.bat или просто nmake
Ждем окончания компиляции
nmake clean

11. Возвращаемся в студию, выделяем и билдим нужные нам библиотеки.
Я компилил qtmain, QtGui, QtCore, QtNetwork, QtOpenGL, QtSQL, QtXML.
Потом делаем в c:\qt\4.2.3\:
del /f /s /q *.obj
del /f /s /q *.ilk
del /f /s /q *.pch

12. Процесс завершен. Теперь надо ставить qt-vsintegration-1.2.2.exe, скопированный с  того-что-нельзя-называть-дабы-не-упоминать-о-неупоминаемом-имя-которого-мы-не-произносим-вслух.
 
Папка с QT в результате занимает у меня 516 метров.
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Апрель 05, 2007, 18:59 »

Дополню вышесказанное статьей: Building static Qt on Windows
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
aliks-os
Гость
« Ответ #2 : Апрель 06, 2007, 12:38 »

Скиньте мне пожалуйста на мыло адрес
того-что-нельзя-называть-дабы-не-упоминать-о-неупоминаемом-имя-которого-мы-не-произносим-вслух.

добавлено спустя 2 часа 27 минут:

 А можно ли поставить и юзать все это на WinXP без установки VS.
А то у меня нет его, а при сборке использую компилятор от Борланда и выскакивают куча ошибок
Записан
noosooth
Гость
« Ответ #3 : Апрель 06, 2007, 17:06 »

Чтобы не плодить топики напишу тут.

Я тут недавно переписывал драйвер для одной железяки под виндой.
Отладочную инфу от драйвера наблюдал в DebugView, а она до кучи перехватывала и OutputDebugString от win32 приложений.
Смешно конечно. Отлаживал драйвер, а увидел что выводит в debugger Qt'овое приложение.

Короче увидел я там, что моё поделие, собранное при помощи компилятора от VS2005 со static release Qt 4.2.3 + статически слинкованный runtime, сыпет при запуске и иногда в процессе работы qWarning'ами типа:

 
Цитировать
[2252] QObject::moveToThread: Current thread (01522428) is not the object's thread (00DA44A0).
[2252] Cannot move to target thread (00DA44A0)

Странно думаю, ведь сразу после запуска  поток в программе у меня один.

Полез собрал release /examples/mainwindows/mdi
Та же фигня при запуске.

На работе приложения оно вроде никак не сказывается.

Спрашивается что в данном случае не нравится QObject::moveToThread?
И кого он собственно move?

P.S. Что-то похожее проскакивало тут, но как-то невнятно.
Записан
ReAmimaFan
Гость
« Ответ #4 : Апрель 10, 2007, 15:16 »

Сделал все как было написано в первом посте и при попытке откомпилировать проек получаю
cannot open input file 'c:\Qt\4.2.2\lib\QtGui4.lib'
Что я сделал не правильно подскажите плз.
З.Ы. поделитесь кто нибудь ключиком к 4.2.3
Записан
Tertium Organum
Гость
« Ответ #5 : Апрель 12, 2007, 09:02 »

блин, QtGui4.lib - это статлиба для линковки dll!
надо грузить QtGui.lib или QtGuid.lib для отладочного проекта

проект, создаваемый интегратором хочет динамическую куте по умолчанию


ключик как и на все остальные продукты троллтека, здесь писать не дают, на личку кину
Записан
ReAnimaFan
Гость
« Ответ #6 : Апрель 12, 2007, 12:30 »

Цитата: "Tertium Organum"

надо грузить QtGui.lib или QtGuid.lib для отладочного проекта
проект, создаваемый интегратором хочет динамическую куте по умолчанию

Не подскажете как сделать так чтобы он хотел статическую куте? Буду очень благодарен.
Записан
Tertium Organum
Гость
« Ответ #7 : Апрель 14, 2007, 00:15 »

просто прописать в настройках линкера -> инпут вместо QtGui4.lib
QtGui.lib
Записан
WW
Гость
« Ответ #8 : Май 28, 2007, 12:50 »

Цитата: "Tertium Organum"

4.Находим C:\Qt\4.2.3\mkspecs\win32-msvc2005\qmake.conf. Правим в нем, чтобы линковать к кутешным либам MSVCRT статически:

QMAKE_CFLAGS_RELEASE   = -O2 -MD
QMAKE_CFLAGS_DEBUG   = -Zi -MDd
      
на

QMAKE_CFLAGS_RELEASE   = -O2 -MT
QMAKE_CFLAGS_DEBUG   = -Zi -MTd

Находим строку типа «CONFIG   += qt warn_on release...» и убираем в ее конце директивы embed_manifest_dll и embed_manifest_exe


А есть решение под MinGW. Чтобы "все свое ношу с собой". А то завязка на mingw32.dll остается...
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #9 : Май 28, 2007, 13:52 »

Цитата: "WW"

А есть решение под MinGW. Чтобы "все свое ношу с собой". А то завязка на mingw32.dll остается...


Читаем по ссылке во вотром посте этой темы
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
WW
Гость
« Ответ #10 : Май 28, 2007, 14:20 »

Веселый  Пасиб! Слона-то и не приметил.
Записан
Djavdet
Гость
« Ответ #11 : Сентябрь 26, 2007, 11:28 »

для 4.3.1 версии QT схема  покатит?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #12 : Сентябрь 26, 2007, 14:44 »

для 4.3.1 версии QT схема  покатит?

Да, должна
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
3epo4
Гость
« Ответ #13 : Сентябрь 27, 2007, 11:42 »

Сделал все по инструкции, в итогде такие ошибки линковки:
Цитировать
1>------ Build started: Project: screenshot, Configuration: Release Win32 ------
1>MOC screenshot.h
1>Compiling...
1>moc_screenshot.cpp
1>screenshot.cpp
1>main.cpp
1>Generating Code...
1>Linking...
1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _longjmp already defined in LIBCMT.lib(longjmp.obj)
1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _malloc already defined in LIBCMT.lib(malloc.obj)
1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _fprintf already defined in LIBCMT.lib(fprintf.obj)
1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: ___iob_func already defined in LIBCMT.lib(_file.obj)
1>MSVCRT.lib(MSVCR80.dll) : error LNK2005: _free already defined in LIBCMT.lib(free.obj)
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: __thiscall type_info::type_info(class type_info const &)" (??0type_info@@AAE@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
1>MSVCRT.lib(ti_inst.obj) : error LNK2005: "private: class type_info & __thiscall type_info::operator=(class type_info const &)" (??4type_info@@AAEAAV0@ABV0@@Z) already defined in LIBCMT.lib(typinfo.obj)
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
1>release\screenshot.exe : fatal error LNK1169: one or more multiply defined symbols found
1>screenshot - 8 error(s), 1 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #14 : Сентябрь 27, 2007, 12:57 »

Сделал все по инструкции, в итогде такие ошибки линковки

Очисть проект, перегенери мейк-файл или файл студийного проекта и попробуй собрать заново
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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