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

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

Страниц: [1] 2 3 4   Вниз
  Печать  
Автор Тема: Трабла со статической сборкой Qt 4.4.3 (.lib-ы с 4-кой на  (Прочитано 41735 раз)
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« : Декабрь 14, 2008, 01:34 »

Господа! Возникла странная трабла, надеюсь на помощь.

Сконфигурил и собрал Qt 4.4.3 commercial под VS2008 Prof, в следующей последовательности:
1) configure -static (+ключи для нужного)
2) mingw32-make sub-scr
3) установил интегратор 1.4.3

Тишь да гладь, ни ворнингов, ни еггогов. После этого захожу в VS, внешне все тоже чудно, QT прописалась в IDE, но при этом не могу собрать ни один из своих старых проектов - нужная библиотека Qt (в моем случае это QtCored.lib) в папке Qt с либами имеет название QtCored4.lib, и сборщик ее, естественно, не находит. Пытался читерить - переименовывать либу, отрезая 4-ку, но ничего это не дало, стали появляться ошибки при сборке. Не подскажите, что делаю не так? В мануале по статической сборке говорится, что, если верхние два пункта выполнены, библиотеки изначально не должны иметь в названии номер версии (4-ку).
« Последнее редактирование: Декабрь 19, 2008, 12:41 от Константин » Записан

Эвтаназия - наше хобби!
Rcus
Гость
« Ответ #1 : Декабрь 14, 2008, 09:58 »

/*в шоке*/

Вы уверены что точно описали свои действия? Если так то получается вы собираете Qt одним компилятором, а приложения пытаетесь другим Улыбающийся Не выйдет, читайте ман по установке Qt.
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #2 : Декабрь 14, 2008, 14:11 »

/*в шоке*/

Вы уверены что точно описали свои действия? Если так то получается вы собираете Qt одним компилятором, а приложения пытаетесь другим Улыбающийся Не выйдет, читайте ман по установке Qt.

Ну да, все верно. Qt компилируется с помощью g++, в последствии я использую VС. Интегратор, насколько я понимаю, выполняет работу по объединению средств Qt и MSVS (добавляет разные визуальные средства, а также MOC для обработки хеадеров, добавляет директории). Какая зависимость от компилятора при компилировании приложений с использованием  .lib-файлов, содержащих машинный код, я, если честно, не понял. Улыбающийся
Записан

Эвтаназия - наше хобби!
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Декабрь 14, 2008, 14:54 »

Цитировать
Т.е. если вы собрали библиотеку Qt с помощью одного компилятора, то и собственную программу, которая будет использовать dll'ки Qt, должны компилировать этим же компилятором.
(взято тут)
GCC незнает кто такие *.lib у него свои типы файлов (*.a)
Записан

Юра.
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #4 : Декабрь 14, 2008, 15:38 »

Цитировать
Т.е. если вы собрали библиотеку Qt с помощью одного компилятора, то и собственную программу, которая будет использовать dll'ки Qt, должны компилировать этим же компилятором.
(взято тут)
GCC незнает кто такие *.lib у него свои типы файлов (*.a)

С .dll проблем, в общем и целом, нет. Но .dll - это динамические библиотеки. В этом случае надо будет вкладывать их в инсталл-пакет для того, чтобы приложение гарантированно работало на другом компьютере. Я собираю все в один файл, и .dll в этом случае не нужны. В этом случае VC использует файлы с расширением .lib, т.е. статические библиотеки. Вот ман, который я использовал для статической сборки Qt:
http://www.crossplatform.ru/documentation/qtdoc4.3/deployment-windows.php#static-linking
Там, в частности, сказано:
"Как только configure закончит работу, введите следующее:

 nmake sub-src

Это соберет Qt статически. Заметьте, что в отличие от динамической сборки, в результате статической сборки библиотеки Qt будут без номера версии, например, QtCore4.lib будет QtCore.lib. Кроме того, мы использовали nmake во всех примерах, но если вы используете MinGW вместо него вы должны воспользоваться mingw32-make."

То, что указано тут, не происходит - lib-ы, несмотря на ключ, имеют номер версии на конце и VC к ним не обращается. Единственно, что может (теоретически) иметь негативные последствия - я не использовал ключ -platform win32-msvc2008 при конфигурации Qt, т.к. его использование приводит к ошибке:
Код:
...<skipped>...
Creating qmake...
execute: File or path is not found (nmake)
execute: File or path is not found (nmake)
Cleaning qmake failed, return code -1

P.S. Запустил сборку с помощью nmake вместо mingw32-make, о результатах отпишусь. Улыбающийся
« Последнее редактирование: Декабрь 14, 2008, 15:48 от PinkPanther » Записан

Эвтаназия - наше хобби!
Detonator
Гость
« Ответ #5 : Декабрь 14, 2008, 17:10 »

Цитировать
То, что указано тут, не происходит - lib-ы, несмотря на ключ, имеют номер версии на конце


Значит что-то ты не так скомпилил.
lib-ы при статике получаются как раз без номера и прекрасно линкуются.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #6 : Декабрь 14, 2008, 17:19 »

2 PinkPanther, ты определись для начала с компилятором, а потом уже со всем остальным.
Записан

Юра.
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #7 : Декабрь 14, 2008, 17:56 »

Цитировать
Значит что-то ты не так скомпилил.
lib-ы при статике получаются как раз без номера и прекрасно линкуются.

Трудно не согласиться, очевидно, ошибка у меня, иначе бы ни у кого ничего не работало. Улыбающийся
Однако, "что-то" довольно трудно исправить, хотелось бы конкретики, что именно требуется к исправлению.
Что именно сделано, я указал в первом сообщении, а что требуется исправить, хотелось бы узнать у вас. Улыбающийся
Я, к сожалению, в программировании под Win32 опыта большого не имею, т.к. основной опыт приобретен в 90-е годы, на TC2.0 и BC3.1, где самой крутой библиотекой была Turbo Vision.

Цитировать
2 PinkPanther, ты определись для начала с компилятором, а потом уже со всем остальным.

Я бы хотел использовать компилятор VC++ и среду VS2008. Т.е. редактировать, компилировать и собирать проекты средствами VS2008, которая, вероятнее всего, будет использоваться какие-то нативные средства Qt, типа MOC, которые добавит интегратор... чем собирать саму Qt, мне совершенно все равно. Чем нужно, тем и соберу. Главное, чтобы потом все из неё работало в VS2008. Пока, после успешной конфигурации (с ключом -platform win32-msvc2008 - запустилось после прописывания пути к бинарникам VC в PATHе) nmake вылетел с ошибками компиляции MySQL-модуля (ключ -qt-sql-mysql). Грустный

Еще вопрос - как собрать Qt, чтобы можно было выбирать, какой именно вариант сборки использовать? В VS есть опция, которая, например, позволяет делать этот выбор в MFC-проектах (что мы используем - dll или все-в-исполняемом). В случае с Qt нужно делать две независимые сборки? Или нужно ставить 2 Qt и две VS2008? Или каждый раз пересобирать Qt, если нужно перейти с динамики на статику? Или это крайне затруднительно?
Записан

Эвтаназия - наше хобби!
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #8 : Декабрь 14, 2008, 18:14 »

Для всего этого вам нужно всего лишь одна VS2008. Qt  и ваши приложения должны компилироваться одним и тем же компилятором. В вашем случае это VS2008.

По поводу статической и динамической Qt: да для этого вам нужно будет иметь 2 сборки Qt в разных директориях.

По поводу ошибки сборки MySQL: На вашей машине дожен быть установлен MySQL и прописаны пути к инклудам и либам MySQL.
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #9 : Декабрь 14, 2008, 19:58 »

Для всего этого вам нужно всего лишь одна VS2008. Qt  и ваши приложения должны компилироваться одним и тем же компилятором. В вашем случае это VS2008.

По поводу статической и динамической Qt: да для этого вам нужно будет иметь 2 сборки Qt в разных директориях.

По поводу ошибки сборки MySQL: На вашей машине дожен быть установлен MySQL и прописаны пути к инклудам и либам MySQL.

Большое спасибо! Статическая сборка собралась как надо с помощью VC (nmake) и работает.
По поводу 2 версий Qt: выбор между ними надо будет делать перед компиляцией, в диалоге, где можно выбрать версию?
Записан

Эвтаназия - наше хобби!
Detonator
Гость
« Ответ #10 : Декабрь 14, 2008, 20:13 »

в разные каталоги ставь и в каждом по своему компили.
А смысл вообще две версии иметь?
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #11 : Декабрь 14, 2008, 21:10 »

в разные каталоги ставь и в каждом по своему компили.
А смысл вообще две версии иметь?

Вопрос, скорее, не в том, как собрать разные версии Qt в разных каталогах (а точнее, одну и ту же версию, но в статической и динамической сборке), а как их в дальнейшем относительно последовательно использовать в VS2008. Улыбающийся

Зачем: мелкие и простые приложения, как правило не имеет смысла запихивать в деплой-инсталлятор. Достаточно запихнуть все нужное в один исполняемый файл. Крупные приложения, которые тоже иногда приходится писать, при развертывании чаще всего вынуждены учитывать конфиг пользовательской машины, создавать .ini-файлы, привязываться к какому-то каталогу, а при удалении удалять себя, плоды своей деятельности, записи в реестре, и т.д. Одного файла в этом случае мало, будет как минимум 2 исполняемых, приложение и анинсталл. В этом случае проще запихнуть все в инсталлятор, и компилить, соответственно, как обычно, используя не .lib, а динамические .dll, которые войдут в комплект пакета.
Записан

Эвтаназия - наше хобби!
ритт
Гость
« Ответ #12 : Декабрь 14, 2008, 23:22 »

ты анинсталлки тоже на кутэ пишешь? Улыбающийся
Записан
PinkPanther
Самовар
**
Offline Offline

Сообщений: 169



Просмотр профиля
« Ответ #13 : Декабрь 15, 2008, 00:15 »

ты анинсталлки тоже на кутэ пишешь? Улыбающийся

По правде говоря, писать полноценный анинсталл мне не доводилось. Приходилось писать утилитки, которые что-то ищут и вычищают. Писал на том, на чем был написан остальной код программы. С Qt я знаком меньше недели, и процесс написания инсталлера и анинсталлера с помощью Qt пока себе представляю слабо, но вроде в литературе об этом какая-то информация имеется.
Записан

Эвтаназия - наше хобби!
wyvern
Гость
« Ответ #14 : Декабрь 15, 2008, 09:45 »

привет! тоже не могу собрать статически Qt

переменные окружения:
INCLUDE = C:\Program Files\Microsoft Visual Studio 8\VC\include;C:\Program Files\Microsoft Visual Studio 8\VC\PlatformSDK\Include
PATH = C:\Program Files\Microsoft Visual Studio 8\VC\bin;C:\Program Files\Microsoft Visual Studio 8\VC;%QTDIR%\bin\
QTDIR = C:\Qt\4.4.3
QMAKESPEC = win32-msvc2005

изменения в C:\Qt\4.4.3\mkspecs\win32-msvc2005\qmake.conf:
CONFIG += qt warn_on release incremental flat link_prl precompile_header autogen_precompile_source copy_dir_files debug_and_release debug_and_release_target
QMAKE_CFLAGS_RELEASE = -O2 -MT

конфигурирую:
configure.exe -debug-and-release -platform win32-msvc2005 -qt-sql-odbc -static -no-phonon -no-webkit -no-sql-sqlite

собираю:
nmake sub-src

результат:
nmake вылетает с различными ошибками при разных ключах configure.exe

никак не пойму, что не так
« Последнее редактирование: Декабрь 15, 2008, 10:17 от wyvern » Записан
Страниц: [1] 2 3 4   Вверх
  Печать  
 
Перейти в:  


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