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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Статическая сборка Qt, vs2008.  (Прочитано 19483 раз)
NkuNLANfT
Гость
« : Декабрь 15, 2009, 21:42 »

Здравствуйте.
Пытаюсь собрать Qt 4.6 для VS2008, параметры конфигурации:
configure -debug-and-release -qt-libpng -qt-libjpeg -static -platform win32-msvc2008 -no-phonon -no-webkit -no-phonon-backend -plugin-sql-odbc -plugin-sql-sqlite -no-sql-sqlite -qt-zlib -qt-gif -qt-libmng -qt-libtiff

Сборка заканчивается ошибками:
Код:
moc_qtdocinstaller.cpp
moc_remotecontrol_win.cpp
Generating Code...
        cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MTd -W3 -w34100 -w34189 -GR -EHsc
 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DUSE_STATIC_SQLITE_PLUGIN -DQT_SQL_LI
B -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -
I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtNetwork" -I"..\..\..\..\i
nclude\QtGui" -I"..\..\..\..\include\QtXml" -I"..\..\..\..\include\QtSql" -I"..\
..\..\..\include" -I"..\..\..\..\include\QtHelp" -I"..\..\..\shared\fontpanel" -
I"..\..\..\..\include\ActiveQt" -I"tmp\moc\debug_static" -I"." -I"..\..\..\..\mk
specs\win32-msvc2008" -Fotmp\obj\debug_static\ @C:\DOCUME~1\9335~1\LOCALS~1\Temp
\nm638.tmp
qrc_assistant.cpp
qrc_assistant_images.cpp
Generating Code...
        link /LIBPATH:"d:\Qt\qt-vc-4.6.0\lib" /LIBPATH:"d:\Qt\qt-vc-4.6.0\lib" /
NOLOGO /DEBUG /MANIFEST /MANIFESTFILE:"tmp\obj\debug_static\assistant.intermedia
te.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsof
t.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' l
anguage='*' processorArchitecture='*'" /OUT:..\..\..\..\bin\assistant.exe @C:\DO
CUME~1\9335~1\LOCALS~1\Temp\nm639.tmp
main.obj : error LNK2019: unresolved external symbol "class QObject * __cdecl qt
_plugin_instance_qsqlite(void)" (?qt_plugin_instance_qsqlite@@YAPAVQObject@@XZ)
referenced in function "public: __thiscall StaticqsqlitePluginInstance::Staticqs
qlitePluginInstance(void)" (??0StaticqsqlitePluginInstance@@QAE@XZ)
..\..\..\..\bin\assistant.exe : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio 9.0\VC\BIN\link.EXE"' :
return code '0x460'
Stop.
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe"' :
 return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.

D:\Qt\qt-vc-4.6.0>
Подскажите пожалуйста, что не так делаю.
Кстати, почему-то у меня параметр -no-assistant-webkit не хочет работать (unknown option).
С меньшим набором параметров (configure -debug-and-release -static) тоже были ошибки.

Добавю, что в соответствии с рекомендациями вот тут правил файлы.
« Последнее редактирование: Декабрь 15, 2009, 21:57 от NkuNLANfT » Записан
crackedmind
Гость
« Ответ #1 : Декабрь 16, 2009, 04:39 »

Код:
-plugin-sql-sqlite -no-sql-sqlite
Что это? сначала разрешаете плагин sqlite, а потом запрещаете? Улыбающийся

Поэтому сборка и трещит, ассистенту нужен этот плагин

-no-assistant-webkit
C 4.5 такой опции не существует...
Записан
NkuNLANfT
Гость
« Ответ #2 : Декабрь 16, 2009, 05:49 »

Что это? сначала разрешаете плагин sqlite, а потом запрещаете? Улыбающийся
Да это я где-то подсмотрел, сам, если честно, мягко говоря, новичок в этом деле. Но, к сожалению, проблема не в этом. Пробовал с другим набором параметров:
Код:
configure -static -debug-and-release -platform win32-msvc2008 -qt-libpng -qt-libjpeg -qt-zlib -qt-gif -qt-libmng -qt-libtiff
Результат:
Код:
        D:\Qt\4.6.0\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DPHONO
N_MAKE_QT_ONLY_BACKEND -DQT_STATICPLUGIN -DQT_PLUGIN -DQT_PHONON_LIB -DQT_GUI_LI
B -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\.
.\include\QtGui" -I"..\..\..\..\include\phonon" -I"..\..\..\..\include" -I"..\..
\..\..\include\ActiveQt" -I"..\..\..\..\include\phonon_compat\phonon" -I"..\..\.
.\..\include\phonon_compat" -I"..\..\..\..\include\phonon\Phonon" -I"tmp\moc\deb
ug_static" -I"..\..\..\..\mkspecs\win32-msvc2008" -D_MSC_VER=1500 -DWIN32 ..\..\
..\3rdparty\phonon\ds9\mediaobject.h -o tmp\moc\debug_static\moc_mediaobject.cpp

        D:\Qt\4.6.0\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DPHONO
N_MAKE_QT_ONLY_BACKEND -DQT_STATICPLUGIN -DQT_PLUGIN -DQT_PHONON_LIB -DQT_GUI_LI
B -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\.
.\include\QtGui" -I"..\..\..\..\include\phonon" -I"..\..\..\..\include" -I"..\..
\..\..\include\ActiveQt" -I"..\..\..\..\include\phonon_compat\phonon" -I"..\..\.
.\..\include\phonon_compat" -I"..\..\..\..\include\phonon\Phonon" -I"tmp\moc\deb
ug_static" -I"..\..\..\..\mkspecs\win32-msvc2008" -D_MSC_VER=1500 -DWIN32 ..\..\
..\3rdparty\phonon\ds9\videowidget.h -o tmp\moc\debug_static\moc_videowidget.cpp

        D:\Qt\4.6.0\bin\moc.exe -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DPHONO
N_MAKE_QT_ONLY_BACKEND -DQT_STATICPLUGIN -DQT_PLUGIN -DQT_PHONON_LIB -DQT_GUI_LI
B -DQT_CORE_LIB -DQT_THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\.
.\include\QtGui" -I"..\..\..\..\include\phonon" -I"..\..\..\..\include" -I"..\..
\..\..\include\ActiveQt" -I"..\..\..\..\include\phonon_compat\phonon" -I"..\..\.
.\..\include\phonon_compat" -I"..\..\..\..\include\phonon\Phonon" -I"tmp\moc\deb
ug_static" -I"..\..\..\..\mkspecs\win32-msvc2008" -D_MSC_VER=1500 -DWIN32 ..\..\
..\3rdparty\phonon\ds9\volumeeffect.h -o tmp\moc\debug_static\moc_volumeeffect.c
pp
        cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MTd -GR -EHsc -W3 -w34100 -w34189
 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DPHONON_MAKE_QT_ONLY_BACKEND -DQT_STA
TICPLUGIN -DQT_PLUGIN -DQT_PHONON_LIB -DQT_GUI_LIB -DQT_CORE_LIB -DQT_THREAD_SUP
PORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..
\include\phonon" -I"..\..\..\..\include" -I"..\..\..\..\include\ActiveQt" -I"..\
..\..\..\include\phonon_compat\phonon" -I"..\..\..\..\include\phonon_compat" -I"
..\..\..\..\include\phonon\Phonon" -I"tmp\moc\debug_static" -I"..\..\..\..\mkspe
cs\win32-msvc2008" -Fotmp\obj\debug_static\ @C:\DOCUME~1\9335~1\LOCALS~1\Temp\nm
38C.tmp
abstractvideorenderer.cpp
audiooutput.cpp
backend.cpp
..\..\..\3rdparty\phonon\ds9\backend.cpp(69) : error C2227: left of '->m_directS
howMutex' must point to class/struct/union/generic type
..\..\..\3rdparty\phonon\ds9\backend.cpp(69) : error C3861: 'qt_plugin_instance'
: identifier not found
backendnode.cpp
effect.cpp
fakesource.cpp
iodevicereader.cpp
mediagraph.cpp
mediaobject.cpp
videowidget.cpp
videorenderer_soft.cpp
videorenderer_vmr9.cpp
volumeeffect.cpp
qbasefilter.cpp
qpin.cpp
qasyncreader.cpp
qaudiocdreader.cpp
qmeminputpin.cpp
Generating Code...
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio 9.0\VC\BIN\cl.EXE"' : re
turn code '0x2'
Stop.
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe"' :
 return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.

D:\Qt\4.6.0>
Записан
crackedmind
Гость
« Ответ #3 : Декабрь 16, 2009, 08:10 »

Это баг в Phonon'e. В 4.6.1 пофиксили его. Можно либо версию из гита взять Улыбающийся либо исключить из сборки phonon...
Записан
NkuNLANfT
Гость
« Ответ #4 : Декабрь 16, 2009, 16:35 »

Код:
configure -static -debug-and-release -platform win32-msvc2008 -qt-libpng -qt-libjpeg -qt-zlib -qt-gif -qt-libmng -qt-libtiff -no-phonon -no-phono-backend
Таким образом я исключаю phonon, так? Получается вот, что:
Код:
moc_remotecontrol.cpp
moc_aboutdialog.cpp
moc_qtdocinstaller.cpp
moc_remotecontrol_win.cpp
Generating Code...
        cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MTd -W3 -w34100 -w34189 -GR -EHsc
 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DUSE_STATIC_SQLITE_PLUGIN -DQT_WEBKIT
_LIB -DQT_SQL_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_
THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtNetwork"
-I"..\..\..\..\include\QtGui" -I"..\..\..\..\include\QtXml" -I"..\..\..\..\inclu
de\QtSql" -I"..\..\..\..\include\QtWebKit" -I"..\..\..\..\include" -I"..\..\..\.
.\include\QtHelp" -I"..\..\..\shared\fontpanel" -I"..\..\..\..\include\ActiveQt"
 -I"tmp\moc\debug_static" -I"." -I"..\..\..\..\mkspecs\win32-msvc2008" -Fotmp\ob
j\debug_static\ @C:\DOCUME~1\9335~1\LOCALS~1\Temp\nm29B.tmp
qrc_assistant.cpp
qrc_assistant_images.cpp
Generating Code...
        link /LIBPATH:"d:\Qt\4.6.0\lib" /LIBPATH:"d:\Qt\4.6.0\lib" /NOLOGO /DEBU
G /MANIFEST /MANIFESTFILE:"tmp\obj\debug_static\assistant.intermediate.manifest"
 /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Microsoft.Windows.Co
mmon-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df' language='*'
processorArchitecture='*'" /OUT:..\..\..\..\bin\assistant.exe @C:\DOCUME~1\9335~
1\LOCALS~1\Temp\nm29C.tmp
   Creating library ..\..\..\..\bin\assistant.lib and object ..\..\..\..\bin\ass
istant.exp
main.obj : error LNK2019: unresolved external symbol "class QObject * __cdecl qt
_plugin_instance_qsqlite(void)" (?qt_plugin_instance_qsqlite@@YAPAVQObject@@XZ)
referenced in function "public: __thiscall StaticqsqlitePluginInstance::Staticqs
qlitePluginInstance(void)" (??0StaticqsqlitePluginInstance@@QAE@XZ)
..\..\..\..\bin\assistant.exe : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio 9.0\VC\BIN\link.EXE"' :
return code '0x460'
Stop.
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe"' :
 return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.

D:\Qt\4.6.0>
Посоветуйте, пожалуйста, что-то ещё.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #5 : Декабрь 16, 2009, 18:03 »

Все повторить по новой в новом каталоге Qt.
И при статической компиляции Qt не следует использовать опции типа -plugin-sql-sqlite.
Записан
NkuNLANfT
Гость
« Ответ #6 : Декабрь 16, 2009, 18:07 »

Последние два раза такие опции и не использовал, но попробую ещё раз.

Попробовал:
Код:
moc_remotecontrol.cpp
moc_aboutdialog.cpp
moc_qtdocinstaller.cpp
moc_remotecontrol_win.cpp
Generating Code...
        cl -c -nologo -Zm200 -Zc:wchar_t- -Zi -MTd -W3 -w34100 -w34189 -GR -EHsc
 -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DUSE_STATIC_SQLITE_PLUGIN -DQT_WEBKIT
_LIB -DQT_SQL_LIB -DQT_XML_LIB -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE_LIB -DQT_
THREAD_SUPPORT -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtNetwork"
-I"..\..\..\..\include\QtGui" -I"..\..\..\..\include\QtXml" -I"..\..\..\..\inclu
de\QtSql" -I"..\..\..\..\include\QtWebKit" -I"..\..\..\..\include" -I"..\..\..\.
.\include\QtHelp" -I"..\..\..\shared\fontpanel" -I"..\..\..\..\include\ActiveQt"
 -I"tmp\moc\debug_static" -I"." -I"..\..\..\..\mkspecs\win32-msvc2008" -Fotmp\ob
j\debug_static\ @C:\DOCUME~1\9335~1\LOCALS~1\Temp\nm283.tmp
qrc_assistant.cpp
qrc_assistant_images.cpp
Generating Code...
        link /LIBPATH:"d:\Qt\4.6.0-vs2008\lib" /LIBPATH:"d:\Qt\4.6.0-vs2008\lib"
 /NOLOGO /DEBUG /MANIFEST /MANIFESTFILE:"tmp\obj\debug_static\assistant.intermed
iate.manifest" /SUBSYSTEM:WINDOWS "/MANIFESTDEPENDENCY:type='win32' name='Micros
oft.Windows.Common-Controls' version='6.0.0.0' publicKeyToken='6595b64144ccf1df'
 language='*' processorArchitecture='*'" /OUT:..\..\..\..\bin\assistant.exe @C:\
DOCUME~1\9335~1\LOCALS~1\Temp\nm284.tmp
   Creating library ..\..\..\..\bin\assistant.lib and object ..\..\..\..\bin\ass
istant.exp
main.obj : error LNK2019: unresolved external symbol "class QObject * __cdecl qt
_plugin_instance_qsqlite(void)" (?qt_plugin_instance_qsqlite@@YAPAVQObject@@XZ)
referenced in function "public: __thiscall StaticqsqlitePluginInstance::Staticqs
qlitePluginInstance(void)" (??0StaticqsqlitePluginInstance@@QAE@XZ)
..\..\..\..\bin\assistant.exe : fatal error LNK1120: 1 unresolved externals
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio 9.0\VC\BIN\link.EXE"' :
return code '0x460'
Stop.
NMAKE : fatal error U1077: '"D:\Microsoft Visual Studio 9.0\VC\BIN\nmake.exe"' :
 return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.
NMAKE : fatal error U1077: 'cd' : return code '0x2'
Stop.

D:\Qt\4.6.0-vs2008>
При этом Qt удалял и ставил заново. Может я что-то упускаю? Опишу свои действия:
1. Скачиваю qt-win-opensource-4.6.0-vs2008.exe, устанавливаю (не на системный диск, но разве это имеет значение?).
2. Вношу измения в файлы, как описано тут (второй способ).
3. Visual Studio 2008 command promt, перехожу в папку с Qt, configure с параметрами:
Код:
-static -debug-and-release -platform win32-msvc2008 -qt-libpng -qt-libjpeg -qt-zlib -qt-gif -qt-libmng -qt-libtiff
-no-phonon -no-phonon-backend
4. nmake, через несколько часов получаю ошибки.
« Последнее редактирование: Декабрь 17, 2009, 01:09 от NkuNLANfT » Записан
NkuNLANfT
Гость
« Ответ #7 : Декабрь 17, 2009, 03:45 »

Прошу прощения за то, что апаю топик, но уже не знаю, что делать, гуглить пробовал - подходящих советов не нашел, у самого идей нет.
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 587


Просмотр профиля
« Ответ #8 : Декабрь 17, 2009, 08:54 »

Читаем файл INSTALL:

If you need to reconfigure and rebuild Qt from the same location,
    ensure that all traces of the previous configuration are removed
    by entering the build directory and typing

        nmake confclean

    before running the configure script again.

Выполни перед configure очистку конфигурации - после установки с использованием qt-win-opensource-4.6.0-vs2008.exe.

В опциях конфигурации вместо -debug-and-release используй -release
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #9 : Декабрь 17, 2009, 10:11 »

Михаил, если пользоваться установщиком, то мэйкфайла не будет (до запуска configure), т.е. если Qt именно установили на чисто, то в первый раз просто запускается configure, а вот перед последующими переконфигурациями нужно запускать {n}make confclean
Записан

Юра.
Dendy
Гость
« Ответ #10 : Декабрь 17, 2009, 10:34 »

Да, и если вам лично этот SQLite не нужен, то совершенно нет надобности пересобирать всю библиотеку. После конфигурации делаете:

Код
Bash
cd src/tools
nmake
cd ../corelib
nmake
cd ../gui
nmake
 

И так далее, собираете только то, что вам нужно. Порядок не важен, ибо исполняемые файлы не создаются (кроме тех что в src/tools, но вы и их можете не собирать - просто скопируйте moc, rcc и uic из уже готовой сборки). И правда ведь, зачем вам Ассистант и прочий инструментарий в статической сборке.
Записан
NkuNLANfT
Гость
« Ответ #11 : Декабрь 18, 2009, 00:23 »

Да, и если вам лично этот SQLite не нужен, то совершенно нет надобности пересобирать всю библиотеку.
Большое спасибо, собирать по частям я не догадался.

В опциях конфигурации вместо -debug-and-release используй -release
Можно узнать почему? Я так и сделал и, вроде, примерно понимаю разницу, но на это есть какие-то причины или нет?

И ещё два глупых вопроса:
Решил книгу по Qt почитать, нашел "Qт 4 программирование GUI на С++" под авторством Бланшет и Саммерфилд. Первые два простых примерах (надпись и кнопка) - всё ок, а вот третий пример показывающий синхронизацию двух виджетов почему-то не работает как надо.
Код:
#include <QtGui/QApplication>

#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

QWidget *window = new QWidget;
window->setWindowTitle("test");
QSpinBox *spinBox = new QSpinBox;
QSlider *slider = new QSlider(Qt::Horizontal);
spinBox->setRange(0, 130);
slider->setRange(0, 130);
QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValude(int)));
QObject::connect(slider, SIGNAL(valudeChanged(int)), spinBox, SLOT(setValude(int)));
spinBox->setValue(35);

QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window->setLayout(layout);
window->show();

return app.exec();
}
Программа компилируется и запускается, но слайдер и спинбокс не взаимодействуют и изначально положение слайдера не соответствует значению в спинбоксе. Что не так?

Второй вопрос - размер программы 5,45 мб - это нормально?
Записан
Dendy
Гость
« Ответ #12 : Декабрь 18, 2009, 00:42 »

Код:
	QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValude(int)));
QObject::connect(slider, SIGNAL(valudeChanged(int)), spinBox, SLOT(setValude(int)));

valude - три раза. При запуске с консоли должно посыпать ошибками, что таких сигналов/слотов нет. Будьте бдительны.

Второй вопрос - размер программы 5,45 мб - это нормально?

Для статической сборки, а тем более для дебажной - да.
Записан
NkuNLANfT
Гость
« Ответ #13 : Декабрь 18, 2009, 01:02 »

valude - три раза.
Действительно... аж стыдно, что такую глупость проглядел.

При запуске с консоли должно посыпать ошибками, что таких сигналов/слотов нет. Будьте бдительны.
Я почему-то ожидал, что студия будет указывать на ошибки, этого и не должно быть?

Для статической сборки, а тем более для дебажной - да.
А как мне собрать релизную версию?
Записан
crackedmind
Гость
« Ответ #14 : Декабрь 18, 2009, 01:36 »

nmake release например Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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