Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: 17dufa от Июль 25, 2007, 10:20



Название: VS2005 и голый XP
Отправлено: 17dufa от Июль 25, 2007, 10:20
Пишу на Qt 4.2.2+VS2005
Все замечательно, кроме одного момента: необходимо, чтобы скомпилированный exe мог без проблем запускаться на машине, где кроме Window XP ничего нет. Вроде этого можно добиться исправив флаг по умолчанию /MD на /MT. С пустым проектом это работает. Пытаюсь изменить этот флаг в проекте с использованием Qt и получаю ошибки линковки. Есть подозрение, причина ошибок - флаг /MD при сборке Qt, то есть в тех makefile'ах из которых получается Qt стоит /MD, а использовать /MD библиотеки в /MT проекте нельзя. Пытался исправить /MD на /MT в makefile'ах Qt, чтобы затем пересобрать библиотеку. Исправил - получил похожие ошибки линкера, но еще на стадии сборки Qt :( Может кто сталкивался? как это обойти?


Название: VS2005 и голый XP
Отправлено: pastor от Июль 25, 2007, 12:17
Юзай посик по форуму, была уже тама по поводу  /MD и /MT флагов сборки


Название: VS2005 и голый XP
Отправлено: Sergeich от Июль 25, 2007, 14:19
1. Правишь файл $QTDIR/mkspecs/win32-msvc(...)/qmake.conf
вместо строк
  QMAKE_CFLAGS_RELEASE   = -O2 -MD
  QMAKE_CFLAGS_DEBUG   = -Zi -MDd
пишешь
  QMAKE_CFLAGS_RELEASE   = -O2 -MT
  QMAKE_CFLAGS_DEBUG   = -Zi -MTd
2. Конфигуришь кутю для статичной сборки
  configure -static -bla-bla-bla
3. Собираешь кутю.


Название: VS2005 и голый XP
Отправлено: -=s0L=- от Июль 25, 2007, 16:16
А нафига вообще такое надо, если тянешь qt-шные dll-ки неужели жалко тянуть еще 2 по 300-600кб?? В папке со студией есть установщик рантайма, весит 2,5 метра, запускаешь на голой системе, он молча ставит эти dll-ки и все.


Название: VS2005 и голый XP
Отправлено: 17dufa от Июль 26, 2007, 11:15
спасибо

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

 еще вопрос, насчет статической сборки, там что-то говорят про невозможность пользования плагинами, qsqlite.dll относится к плагинам?


Название: VS2005 и голый XP
Отправлено: pastor от Июль 26, 2007, 11:16
Цитата: "-=s0L=-"
А нафига вообще такое надо, если тянешь qt-шные dll-ки неужели жалко тянуть еще 2 по 300-600кб?? В папке со студией есть установщик рантайма, весит 2,5 метра, запускаешь на голой системе, он молча ставит эти dll-ки и все.


Если используеться configure -static небудет никаких qt-шных dll, а в сочитании с /MT ваще не будет dll


Название: VS2005 и голый XP
Отправлено: Sergeich от Июль 26, 2007, 11:27
Цитировать

еще вопрос, насчет статической сборки, там что-то говорят про невозможность пользования плагинами, qsqlite.dll относится к плагинам?
qsqlite.dll - это плагин для использования SQLite через QSQL. Если надо собрать статический вариант, надо встроить его прямо в кутевую библиотеку. Вместо configure -plugin-sql-sqlite используй configure -qt-sql-sqlite


Название: VS2005 и голый XP
Отправлено: 17dufa от Июль 26, 2007, 11:36
to Sergeich:
сделал как Вы говорите. Во время сборки Qt появились ошибки линковки: библиотека MSVCRT конфликтует с LIBCMT, LNK2005 .... already defined in ...


Название: VS2005 и голый XP
Отправлено: pastor от Июль 26, 2007, 11:46
Цитата: "17dufa"
Во время сборки Qt появились ошибки линковки: библиотека MSVCRT конфликтует с LIBCMT, LNK2005 .... already defined in ...


Такого не должно быть. Ты делал nmake clean перед началом переконфигурации? Попробуй распаковать Qt из исходников, сделать все как говорил Sergeich. Т.е. произвести новую установку (с нуля).

ЗЫ: MSVCRT это Multithreaded, dynamic link (/MD), LIBCMT - Multithreaded, static link (/MT). Возможно дето завалялись объектники со старой сбоки, etc


Название: VS2005 и голый XP
Отправлено: -=s0L=- от Июль 26, 2007, 11:59
Цитата: "pastor"

Если используеться configure -static небудет никаких qt-шных dll, а в сочитании с /MT ваще не будет dll


со -static да, но /MT лучше НЕ использовать, иначе потом не оберешься проблем с линкером и непонятно откуда вываливающимися access violation...


Название: VS2005 и голый XP
Отправлено: pastor от Июль 26, 2007, 12:35
Цитата: "-=s0L=-"

со -static да, но /MT лучше НЕ использовать, иначе потом не оберешься проблем с линкером и непонятно откуда вываливающимися access violation...


Правда???? Почему у меня проблем нет никаких со -static и /MT? Уже пол года собрана Qt с такими параметрами


Название: VS2005 и голый XP
Отправлено: 17dufa от Июль 26, 2007, 15:22
to pastor:
перераспаковал, вроде собралось. Спасибо.

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

 хотя я еще удалил embed_manifest_dll и embed_manifest_exe из mkspecs\win32-msvc2005\qmake.conf "CONFIG += ..."


Название: VS2005 и голый XP
Отправлено: pastor от Июль 26, 2007, 15:23
2 17dufa: You're welcome ;)


Название: VS2005 и голый XP
Отправлено: 17dufa от Июль 26, 2007, 16:23
кхем, qt собралось, а вот проект упорно не хочет. вываливаются ошибки линковки типа такой:
QtCore.lib(qcoreapplication_win.obj) : error LNK2001: unresolved external symbol _atexit
или типа такой (еще веселее):
QtSql.lib(qsqlresult.obj) : error LNK2001: unresolved external symbol @__security_check_cookie@4


Название: VS2005 и голый XP
Отправлено: pastor от Июль 26, 2007, 16:33
Попробуй пересоздать проект заново. Очисть полностью все


Название: VS2005 и голый XP
Отправлено: WW от Июль 26, 2007, 16:34
В опциях проекта еще надо переключить на /MT. Если Qt собраны в статике и приликованными рантайм библиотеками, то и проект тоже должен собираться с этими опциями.


Название: VS2005 и голый XP
Отправлено: Racheengel от Июль 26, 2007, 17:51
убери проверку переполнения в проекте (range check), помоему ошибка именно из за этого.


Название: VS2005 и голый XP
Отправлено: -=s0L=- от Июль 26, 2007, 18:07
Цитата: "pastor"
Цитата: "-=s0L=-"

со -static да, но /MT лучше НЕ использовать, иначе потом не оберешься проблем с линкером и непонятно откуда вываливающимися access violation...


Правда???? Почему у меня проблем нет никаких со -static и /MT? Уже пол года собрана Qt с такими параметрами


ну не всем так везет, когда нить, когда меньше всего ожидаешь это даст о себе знать...


Название: VS2005 и голый XP
Отправлено: pastor от Июль 26, 2007, 18:19
Цитата: "-=s0L=-"

ну не всем так везет, когда нить, когда меньше всего ожидаешь это даст о себе знать...


имхо, это зависит не от Qt, а от качества написания собсвенного проекта. Тут на счастье полагаться не стоит: повезёт или не повезёт.


Название: VS2005 и голый XP
Отправлено: -=s0L=- от Июль 27, 2007, 10:52
Цитата: "pastor"
Цитата: "-=s0L=-"

ну не всем так везет, когда нить, когда меньше всего ожидаешь это даст о себе знать...


имхо, это зависит не от Qt, а от качества написания собсвенного проекта. Тут на счастье полагаться не стоит: повезёт или не повезёт.


нет, дело именно в qt.


Название: VS2005 и голый XP
Отправлено: 17dufa от Июль 31, 2007, 10:23
Вот содержимое единственного файла в проекте (проект смысловой нагрузки не несет, чисто проверить что и как работает).
Код:
#include "stdafx.h"
#include "qdom.h"
#include "QtSql\qsql_sqlite.h"
#include "QtGui\qcursor.h"

int _tmain(int argc, _TCHAR* argv[])
{
QDomDocument * doc = new QDomDocument();
QDomNode node;
doc->appendChild( node );
doc->clear();
QSQLiteResult * res = new QSQLiteResult( new QSQLiteDriver() );
res->handle();

QCursor * cur = new QCursor();
cur->mask();
return 0;
}

в линкере прописаны следующие инпуты:
qtxml.lib
qtcore.lib
Ws2_32.lib
qtgui.lib
qtsql.lib
И проект и qt собраны с ключом /MT. qt собрана со -static
Во время линковки вываливаются ошибки типа следующей:
"Error   6   error LNK2001: unresolved external symbol _ImmGetDefaultIMEWnd@4   qtgui.lib"
и еще на несколько функций imm... все эти функции относятся к Win CE. Как бы сделать так, чтоб qtgui их не тянула?


Название: VS2005 и голый XP
Отправлено: noosooth от Июль 31, 2007, 17:25
Цитата: "17dufa"

Во время линковки вываливаются ошибки типа следующей:
"Error   6   error LNK2001: unresolved external symbol _ImmGetDefaultIMEWnd@4   qtgui.lib"
и еще на несколько функций imm...

А если попробовать слинковаться с imm32.lib и winmm.lib?

Цитата: "17dufa"

 все эти функции относятся к Win CE
Разве?


Название: VS2005 и голый XP
Отправлено: pastor от Июль 31, 2007, 20:32
2 17dufa: а че это у тебя функция main такая странная

Цитировать

int _tmain(int argc, _TCHAR* argv[])



попробуй заюзать нормальную, может в этом все дерево

Цитировать

int main(int argc,char **argv)


Название: VS2005 и голый XP
Отправлено: 17dufa от Август 01, 2007, 11:31
действительно,  imm32.lib и winmm.lib спасили положение. В моем MSDN эти функции описываются, как Win CE


Название: VS2005 и голый XP
Отправлено: noosooth от Август 01, 2007, 15:26
Цитата: "17dufa"
действительно,  imm32.lib и winmm.lib спасили положение. В моем MSDN эти функции описываются, как Win CE

Стало быть надо либо выкинуть такую MSDN, либо приобрести более мощную оптику. ;)

http://msdn2.microsoft.com/en-us/library/ms906007.aspx
http://msdn2.microsoft.com/en-us/library/ms776078.aspx