<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блог Erik’а &#187; халява</title>
	<atom:link href="http://home.edstudio.net.ru/tag/free/feed/" rel="self" type="application/rss+xml" />
	<link>http://home.edstudio.net.ru</link>
	<description>Заметки ни о чём и обо всём</description>
	<lastBuildDate>Sun, 18 Apr 2010 16:32:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Компилирование библиотеки Qt под ОС Windows с поддержкой Phonon</title>
		<link>http://home.edstudio.net.ru/2009/06/compiling-qt-library-under-windows-os-with-support-for-phonon/</link>
		<comments>http://home.edstudio.net.ru/2009/06/compiling-qt-library-under-windows-os-with-support-for-phonon/#comments</comments>
		<pubDate>Fri, 26 Jun 2009 11:32:37 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Решения]]></category>
		<category><![CDATA[phonon]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[ОСи]]></category>
		<category><![CDATA[разработка]]></category>
		<category><![CDATA[халява]]></category>

		<guid isPermaLink="false">http://home.edstudio.net.ru/?p=194</guid>
		<description><![CDATA[В этой статье я&#160;расскажу как скомпилировать Qt&#160;с&#160;поддержкой Phonon. Итак, давайте сначала разберёмся как всё это будет выглядеть. Библиотеки QtWebKit и&#160;Phonon не&#160;являются собственностью Qt.&#160;Они были включены в&#160;него под &#171;свободной лицензией&#187;. В&#160;связи с&#160;этим компилирование обоих этих библиотек возможно только в&#160;shared-версии. Из&#160;этого можно сделать вывод, что про необходимости использования любой из&#160;этих библиотек статичную сборку делать бесполезно. Также надо [...]]]></description>
			<content:encoded><![CDATA[<p>В этой статье я&nbsp;расскажу как скомпилировать <a href="http://qtsoftware.com" target="_blank" title="Qt — A cross-platform application and UI framework">Qt</a>&nbsp;с&nbsp;поддержкой Phonon.</p>
<p><span id="more-194"></span></p>
<p>Итак, давайте сначала разберёмся как всё это будет выглядеть. Библиотеки QtWebKit и&nbsp;Phonon не&nbsp;являются собственностью Qt.&nbsp;Они были включены в&nbsp;него под &laquo;свободной лицензией&raquo;. В&nbsp;связи с&nbsp;этим компилирование обоих этих библиотек возможно только в&nbsp;shared-версии. Из&nbsp;этого можно сделать вывод, что про необходимости использования любой из&nbsp;этих библиотек статичную сборку делать бесполезно.</p>
<p>Также надо заметить, что Phonon использует DirectShow, который поддерживает только свой, &laquo;родной&raquo; компилятор&nbsp;&#8212; nmake (поставляется с&nbsp;некоторыми SDK фирмы Microsoft и,&nbsp;естественно, с&nbsp;Microsoft Visual C++).</p>
<p>Итак, решено! Мы&nbsp;будем использовать nmake и&nbsp;делать shared-сборку <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a name="orientation"></a><br />
<h2>Ориентируемся на&#8230;</h2>
<p>Скажем просто: на&nbsp;какие версии ОС&nbsp;мы&nbsp;собираемся ориентировать нашу программу (на&nbsp;release-стадии, конечно).</p>
<p>Для Windows Vista и&nbsp;ниже (XP&nbsp;например) отлично подойдёт MSVC2005 и&nbsp;Platform SDK для 2003-го сервера. Для самых новых (Vista, Se7en) предпочтительнее брать более новые продукты: MSVC2008 и&nbsp;Platform SDK для 2008-го сервера.</p>
<p>Исходя из&nbsp;этой информации необходимо принять решение о&nbsp;загрузке того или иного ПО&nbsp;из&nbsp;списка ниже.</p>
<p>Также настоятельно рекомендую прочитать &laquo;<a href="#depend">О&nbsp;зависимостях</a>&raquo;.</p>
<h2>А&nbsp;что нам, собственно, нужно?..</h2>
<p>Сначала скачаем всё, чтобы потом не&nbsp;отвлекаться во&nbsp;время установки на&nbsp;ожидание загрузки очередного очень нужного компонента.</p>
<ol>
<li>Для начала&nbsp;&#8212; сам Qt.&nbsp;Берём его <a href="http://get.qtsoftware.com/qt/source/" target="_blank" title="Хранилище Qt SoftWare, в котором можно найти много разных версий под разные ОС">здесь</a>, на&nbsp;официальном сайте. <span style="font-size: 75%; color: gray;">Я не&nbsp;даю прямую ссылку на&nbsp;файл, потому что может произойти так, что из-за меня кто-нибудь скачает древнюю версию, что не&nbsp;красиво. На&nbsp;момент написания статьи была использована версия 4.5.2. Выбираем zip-архив с&nbsp;именем <strong>qt-win-opensource-src-%версия%.zip</strong>, где %версия%&nbsp;&#8212; смотрим самую новую.</span></li>
<li>Ещё Microsoft Visual C++ <span style="font-size: 75%; color: gray;"><strong>Express Edition</strong>, чтоб было всё бесплатно %)</span>. Версию 2005&nbsp;года можно найти <a href="http://www.google.ru/search?hl=ru&#038;newwindow=1&#038;q=visual+c%2B%2B+2005+express+edition+%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C" target="_blank" title="Ищем MSVC2005 Express Edition на просторах сети Интернет">поиском</a>, а&nbsp;вот версия 2008&nbsp;года вполне доступна с&nbsp;<a href="http://www.microsoft.com/express/download/" targte="_blank" title="Microsoft Visual Studio 2008 Express Edition Downloads">сайта самой компании</a>. <span style="font-size: 75%; color: gray;">Самое интересное заключается в&nbsp;том, что абсолютно непонятно какая между ними разница, кроме, конечно, постепенно деградирующего интерфейса&#8230; Я&nbsp;использую MSVC версии 2005&nbsp;года и&nbsp;вполне ей&nbsp;доволен. Что касается более новых версий Windows (Windows Vista и&nbsp;Windows Se7en), то&nbsp;не&nbsp;могу однозначно сказать на&nbsp;сколько программа скомпилированная под MSVC2005&nbsp;будет там работоспособна. На&nbsp;Vista точно будет работать, а&nbsp;вот про Se7en: чего не&nbsp;знаю&nbsp;&#8212; того не&nbsp;знаю.</span></li>
<li>Также нам понадобиться Microsoft Platform SDK for Server. Здесь тоже много версий: <a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=E15438AC-60BE-41BD-AA14-7F1E0F19CA0D&#038;displaylang=en" target="_blank" title="Windows Server 2003 R2 Platform SDK ISO Download">Windows Server <strong>2003</strong>&nbsp;R2&nbsp;Platform SDK ISO Download</a> и&nbsp;<a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&#038;displaylang=en" target="_blank" title="Windows SDK for Windows Server 2008 and .NET Framework 3.5">Windows SDK for Windows Server <strong>2008</strong>&nbsp;and .NET Framework 3.5</a>. <span style="font-size: 75%; color: gray;">Здесь история аналогичная Microsoft Visual C++. У&nbsp;меня версия опять древняя&nbsp;&#8212; 2003&nbsp;года.</span></li>
</ol>
<p>На этом минимальный набор всякого снаряжения подошёл к&nbsp;концу. Но,&nbsp;лично я&nbsp;хочу рассмотреть компиляцию с&nbsp;поддержкой шифрования (OpenSSL) и&nbsp;хочу его собрать сам. Здесь происходит самое интересное: сборка OpenSSL под Windows, которую можно найти по&nbsp;запросу <a href="http://www.google.ru/search?hl=ru&#038;newwindow=1&#038;q=openssl+windows" target="_blank" title="Результаты поиска opensll windows в google">openssl windows</a>, сделана как раз с&nbsp;зависимостью от&nbsp;этого пакета. Чтож, пересоберём как нам надо! <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Итак, дополнительный список вооружения:</p>
<ol>
<li>Сами исходные коды OpenSSL берём <a href="http://www.openssl.org/source/" target="_blank" title="Cryptography and SSL/TLS Toolkit">здесь</a>. <span style="font-size: 75%; color: gray;">Как всегда советую брать новейшую версию. На&nbsp;момент написания последней стабильной версией была 0.9.8k.</span></li>
<li>Microsoft Macro Assembler (MASM), доступный на&nbsp;<a href="http://www.microsoft.com/downloads/details.aspx?familyid=7A1C9DA0-0510-44A2-B042-7EF370530C64&#038;displaylang=en" target="_blank" title="Microsoft Macro Assembler 8.0 (MASM) Package (x86)">официальном сайте (8-ая версия)</a>. <span style="font-size: 75%; color: gray;">Этот пакет необходим для сборки OpenSSL. Здесь также необходимо выбирать версию, соответствующую вашей Visual C++. Но&nbsp;вот 9-ой версии (для MSVC2008) что-то я&nbsp;у&nbsp;них не&nbsp;нашёл.</span></li>
<li>ActivePerl берём <a href="http://www.activestate.com/activeperl/" target="_blank" title="ActivePerl - Complete and Ready-to-Install">тут</a>. <span style="font-size: 75%; color: gray;">Он также необходим для компилирования OpenSSL.</span></li>
</ol>
<p>Вроде, ничего не&nbsp;забыли <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>О&nbsp;том, куда устанавливать</h2>
<p>Иногда случаются такие ситуации, когда надо что-то найти, а&nbsp;никто не&nbsp;знает где это лежит. Для этого я&nbsp;считаю очень удобным, чтобы всё ПО&nbsp;какой-то определённой тематики (особенно, если его так много как здесь) валялось в&nbsp;одной папке. Для себя я&nbsp;определился, что этой самой папочкой станет <i>C:\Development</i> для всяких SDK и&nbsp;папочка <i>C:\Qt\%версия%</i> для всяких Qt&nbsp;(у&nbsp;меня это выглядит так: <i>C:\Qt\4.5.2</i>).</p>
<p>Удобно, не&nbsp;правда&nbsp;ли? <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Установка Windows Server 2003&nbsp;R2&nbsp;Platform SDK</h2>
<p>В связи с&nbsp;&laquo;О&nbsp;том, куда устанавливать&raquo; устанавливаем в&nbsp;<i>C:\Development\Microsoft Platform SDK for Windows Server 2003&nbsp;R2</i>.</p>
<p>Поскольку мало кто полезет читать документацию к&nbsp;этому SDK или&nbsp;же кто захочет поглазеть на&nbsp;примеры исходных кодов, то&nbsp;они нам не&nbsp;нужны и&nbsp;мы&nbsp;их&nbsp;выкидываем (также выкидываем всевозможные тулзы и&nbsp;снаряжения для ненужных процессоров).</p>
<div id="attachment_214" class="wp-caption aligncenter" style="width: 616px"><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/platform-sdk-0.png" alt="Установка Platform SDK" title="Установка Platform SDK" width="606" height="465" class="size-full wp-image-214" /><p class="wp-caption-text">Установка Platform SDK</p></div>
<p>Всё, устанавливаем.</p>
<h2>Установка ActivePerl</h2>
<p>Здесь не&nbsp;важно куда и&nbsp;как вы&nbsp;его установите. Главное галочку напротив вопроса о&nbsp;добавлении в&nbsp;%PATH% не&nbsp;убирайте <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>Установка DirectX SDK</h2>
<p>Здесь всё аналогично установке Platform SDK. Адрес установки: <i>C:\Development\Microsoft DirectX SDK (March 2009)</i>.</p>
<div id="attachment_211" class="wp-caption aligncenter" style="width: 513px"><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/directx-0.png" alt="Установка DirectX SDK" title="Установка DirectX SDK" width="503" height="393" class="size-full wp-image-211" /><p class="wp-caption-text">Установка DirectX SDK</p></div>
<h2>Установка Visual C++ 2005&nbsp;Express Edition</h2>
<p>Здесь следует помнить, что Express Edition&nbsp;&#8212; единственный бесплатный вариант. Чтобы избежать всевозможных проблем следует устанавливать именно её.</p>
<p>Из этого пакета нам однозначно не&nbsp;нужна справочная библиотека MSDN и&nbsp;SQL Server. Выкидываем их.</p>
<p>Компонент Graphical IDE мы&nbsp;оставляем. Нет, ничего писать в&nbsp;нём мы&nbsp;не&nbsp;собираемся, просто есть маленькая программка (<strong>mt.exe</strong> кажется), без которой компилятор будет плакать как маленький.</p>
<div id="attachment_213" class="wp-caption aligncenter" style="width: 516px"><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/msvc2005-0.png" alt="Установка Visual C++ 2005 Express Edition" title="Установка Visual C++ 2005 Express Edition" width="506" height="458" class="size-full wp-image-213" /><p class="wp-caption-text">Установка Visual C++ 2005 Express Edition</p></div>
<p>Будут установлены следующие компоненты: MSVC2005 и&nbsp;.Net Framework v2.0&nbsp;(он,&nbsp;кстати, тоже крайне необходим). Адрес установки, для удобства, я&nbsp;назначил <i>C:\Development\VC</i>.</p>
<p>Обновлять всё это дело до&nbsp;SP1&nbsp;не&nbsp;рекомендую. Я&nbsp;долго шарился по&nbsp;интернету в&nbsp;поисках решений своих ошибок при первых попытках скомпилировать Phonon и&nbsp;прочитал, что с&nbsp;SP1&nbsp;может возникнуть конфликт при сборке Qt.&nbsp;Хотя, это было уже достаточно давно, может уже исправили.</p>
<h2>Установка Microsoft Macro Assembler</h2>
<p>Здесь вообще не&nbsp;предлагается никакая свобода выбора. Просят только принять лицензию. Для любопытных умов: он&nbsp;установился в&nbsp;папку к&nbsp;VC&nbsp;и&nbsp;называется <strong>ml.exe</strong>.</p>
<h2>Компилирование и&nbsp;установка OpenSSL</h2>
<p>Вот, мы&nbsp;уже близки к&nbsp;завершению подготовки перед компиляцией Qt&nbsp;:)</p>
<p>Сначала распакуем архив с&nbsp;OpenSSL куда-нибудь, например в&nbsp;<i>C:\openssl-0.9.8k</i>, запустим скрипт, устанавливающий окружение MSVC (<i>Пуск -> Все программы -> Microsoft C++ 2005&nbsp;Express Edition -> Visual Studio Tools -> Visual Studio 2005&nbsp;Command Prompt</i> или аналогичный, в&nbsp;зависимости от&nbsp;версии) и&nbsp;перейдём с&nbsp;помощью команды <strong><u>cd</u>&nbsp;C:\openssl-0.9.8k</strong> в&nbsp;каталог с&nbsp;исходными кодами OpenSSL.</p>
<p>Вот сейчас нам как раз понадобится Perl, MASM и&nbsp;nmake все сразу. Начнём.</p>
<p>Конфигурируем OpenSSL, выполнив следующую команду в&nbsp;командной строке:</p>
<p><code><br />
<blockquote>perl Configure VC-WIN32 --prefix=C:/Development/OpenSSL</p></blockquote>
<p></code></p>
<p>Естественно, значение параметра <strong>-prefix=</strong> в&nbsp;соответствии нуждам. Также стоит обратить внимание на&nbsp;то,&nbsp;что используется слеш (а&nbsp;не&nbsp;обратный слеш как во&nbsp;всех других местах). Невыполнение этого правила приведёт к&nbsp;краху сборки.</p>
<p>Теперь выполняем команду</p>
<p><code><br />
<blockquote>ms\do_masm</p></blockquote>
<p></code></p>
<p>и</p>
<p><code><br />
<blockquote>nmake -f ms\ntdll.mak</p></blockquote>
<p></code></p>
<p>Началась сборка библиотек OpenSSL, по&nbsp;окончанию которых можно проверить их&nbsp;работоспособность выполнив команду</p>
<p><code><br />
<blockquote>nmake -f ms\ntdll.mak test</p></blockquote>
<p></code></p>
<p>По окончании проверки в&nbsp;консоль будет выведена информации об&nbsp;успешном (или не&nbsp;успешном) завершении проверки работоспособности библиотек.</p>
<p>Всё, устанавливаем (фактически копируем) необходимые файлы (в&nbsp;папку указанную при конфигурировании в&nbsp;<strong>-prefix=</strong>), выполнив в&nbsp;консоли команду:</p>
<p><code><br />
<blockquote>nmake -f ms\ntdll.mak install</p></blockquote>
<p></code></p>
<p>Всё. Теперь нам больше не&nbsp;понадобится ни&nbsp;MASM, ни&nbsp;ActivePerl, ни&nbsp;даже папка в&nbsp;которой мы&nbsp;сейчас находимся вместе с&nbsp;архивом с&nbsp;исходниками OpenSSL.</p>
<h2>Создание файла настроек окружения</h2>
<p>Делается это просто: методом создания файла командной строки.</p>
<p>Создадим файл <i>C:\Development\SetEnv.cmd</i>.</p>
<p>Теперь напишем скрипт установки всех частей окружения вручную, с&nbsp;нуля. Мой вариант:</p>
<blockquote><p><code>@ECHO OFF</p>
<p>@set DEV=C:\Development<br />
@set PATH=%SystemRoot%;%SystemRoot%\system32<br />
@set QTDIR=C:\Qt\4.5.2</p>
<p>@echo Setting OpenSSL Env.<br />
@set PATH=%DEV%\OpenSSL\bin;%PATH%<br />
@set LIB=%DEV%\OpenSSL\lib<br />
@set INCLUDE=%DEV%\OpenSSL\include</p>
<p>@echo Setting DirectX Env.<br />
@set LIB=%DEV%\Microsoft DirectX SDK (March 2009)\Lib\x86;%LIB%<br />
@set INCLUDE=%DEV%\Microsoft DirectX SDK (March 2009)\Include;%INCLUDE%</p>
<p>@echo Setting Windows SDK Env.<br />
@set LIB=%DEV%\Microsoft Platform SDK for Windows Server 2003 R2\Lib;%LIB%<br />
@set INCLUDE=%DEV%\Microsoft Platform SDK for Windows Server 2003 R2\Include;%INCLUDE%<br />
@set CPU=i386<br />
@set NODEBUG=1</p>
<p>@echo Setting MSVC2005 Env.<br />
@set PATH=%DEV%\VC\VC\bin;%DEV%\VC\Common7\Tools;%DEV%\VC\Common7\IDE;%DEV%\VC\VC\VCPackages;%PATH%<br />
@set INCLUDE=%DEV%\VC\VC\INCLUDE;%INCLUDE%<br />
@set LIB=%DEV%\VC\VC\LIB;%LIB%</p>
<p>@echo Setting Framework Env.<br />
@set FrameworkVersion=v2.0.50727<br />
@set FrameworkDir=%SystemRoot%\Microsoft.NET\Framework<br />
@set PATH=%DEV%\VC\SDK\v2.0\Bin;%PATH%<br />
@set LIB=%DEV%\VC\SDK\v2.0\Lib;%LIB%<br />
@set LIBPATH=%FrameworkDir%\%FrameworkVersion%<br />
@set PATH=%LIBPATH%;%PATH%</p>
<p>@echo Setting Qt Env.<br />
@set PATH=%QTDIR%\bin;%PATH%</p>
<p>@title Qt Framework 4.5.2 Development Kit.</p>
<p>cd %QTDIR%</code></p></blockquote>
<p>Здесь применены временный переменные, к&nbsp;примеру <strong>%DEV%</strong> чтобы сократить остальную писанину.</p>
<p>Объяснять что здесь что я&nbsp;не&nbsp;буду. Хочу лишь обратить внимание на&nbsp;установку снаряжения Windows SDK и&nbsp;Framework.</p>
<p>В Windows SDK есть переменные <strong>CPU</strong> и&nbsp;<strong>NODEBUG</strong>, отвечающие за&nbsp;Retail и&nbsp;Debug сборку, а&nbsp;также за&nbsp;архитектуру.</p>
<p>В Framework необходимо проверить правильность всех этих переменных в&nbsp;соответствии окружению. У&nbsp;меня, при использовании MSVC2005&nbsp;они такие, как написано. Если при компиляции возникнет ошибка, что не&nbsp;найден файл с&nbsp;именем <strong>mscoree</strong>, то&nbsp;ошибку следует искать именно здесь.</p>
<p>Чтобы легко использовать это окружение, можно создать на&nbsp;него ярлык. Здесь стоит заметить, что ярлык должен быть &laquo;особенным&raquo;, так как при простом запуске этого файла он&nbsp;выполнится, после чего окно просто закроется. Чтобы этого не&nbsp;случилось делаем так: создаём ярлык в&nbsp;удобном нам месте (правой кнопкой мышки -> Создать -> Ярлык&#8230;), выбираем путь к&nbsp;файлу и&nbsp;приписываем к&nbsp;нему слево <strong>%comspec% /k</strong>. Получится примерно так: <strong>%comspec% /k C:\Development\SetEnv.Cmd</strong>.</p>
<div id="attachment_215" class="wp-caption aligncenter" style="width: 457px"><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/shortcut-0.png" alt="Создания ярлыка" title="Создания ярлыка" width="447" height="334" class="size-full wp-image-215" /><p class="wp-caption-text">Создания ярлыка</p></div>
<p>Последний этап подготовки перед компилированием Qt&nbsp;завершён.</p>
<h2>Сборка Qt</h2>
<p>Вот и&nbsp;всё, всё снаряжение готово к&nbsp;бою <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Итак, первым делом следует распаковать Qt&nbsp;из&nbsp;скачанного архива в&nbsp;необходимую папку (<i>C:\Qt\4.5.2</i>&nbsp;в&nbsp;моём случае) и&nbsp;произвести предварительные настройки для компилятора.</p>
<p>Чтобы произвести настройку компилятора, надо отредактировать файл конфигурации <strong>qmake.txt</strong>, расположенный в&nbsp;папке <i>mkspecs\%компилятор%</i>, где %компилятор%&nbsp;&#8212; версия нашего компилятора (для MSVC2005&nbsp;оно равно <strong>win32-msvc2005</strong>, а&nbsp;для MSVC2008&nbsp;&#8212; <strong>win32-msvc2008</strong>). Открываем этот документ в&nbsp;текстовом редакторе и&nbsp;ищем следующие строчки (они могут немного отличаться):</p>
<p><code><br />
<blockquote>QMAKE_CFLAGS_RELEASE    = -O2 -MD<br />
QMAKE_CFLAGS_DEBUG      = -Zi -MDd</p></blockquote>
<p></code></p>
<p>Если обладаем многоядерным процессором, то можно компилировать в несколько потоков. Для этого используется флаг <strong>-MPi</strong>, где <strong>i</strong> &#8211; количество процессоров (для 2-х-ядерного процессора это будет выглядеть так: <strong>-MP2</strong>). Этот флаг можно добавить и в release, и в debug флаги.</p>
<p><span style="font-size: 75%; color: gray;">Примечание: если файл конфигурации содержит флаг <strong>-GL</strong> (оптимизация всей программы), то&nbsp;<strong>удалите</strong> его. Этот флаг потенциально может создать конфликт при компиляции <strong>QtWebKit</strong>.</span></p>
<p>После всех наших преобразований эти строки будут выглядеть примерно так:</p>
<p><code><br />
<blockquote>QMAKE_CFLAGS_RELEASE    = -O2 -MD -MP2<br />
QMAKE_CFLAGS_DEBUG      = -Zi -MDd -MP2</p></blockquote>
<p></code></p>
<p>Некоторые из&nbsp;вас могут спросить, мол, а&nbsp;не&nbsp;лучше&nbsp;ли заменить флаг <strong>-O2</strong>&nbsp;на,&nbsp;к&nbsp;примеру, <strong>-Os</strong> (по&nbsp;аналогии с&nbsp;компилятором <i>g++</i>)? Отвечу: нет, не&nbsp;лучше. Для компилятора <i>nmake</i> этот флаг эквивалентен флагу <strong>-O1</strong>. Подробнее об&nbsp;этом можно почитать <a href="http://msdn.microsoft.com/ru-ru/library/8f8h5cxt.aspx" target="_blank" title="/O1, /O2 (минимизировать размер, максимизировать скорость)">тут, на&nbsp;сайте MSDN</a>.</p>
<p>Распинаться на&nbsp;тему того, какие флаги использовать при конфигурировании Qt&nbsp;я&nbsp;не&nbsp;буду. Просто скажу, что бывают случаи, когда конфигуратор по&nbsp;каким-то причинам не&nbsp;видит возможности использовать тот или иной флаг. Поэтому следует указать все. Здесь приведу свой набор флагов:</p>
<p><code><br />
<blockquote>configure -debug-and-release -shared -exceptions -accessibility -stl -plugin-sql-sqlite -qt-zlib -qt-gif -qt-libpng -qt-libmng -qt-libtiff -qt-libjpeg -no-dsp -no-vcproj -mmx -3dnow -sse -sse2 -direct3d -openssl -no-dbus -phonon -phonon-backend -webkit -scripttools -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde</p></blockquote>
<p></code></p>
<p>Итак, можно начинать конфигурирование и&nbsp;компилирование <strong>qmake.exe</strong>. Для этого запустим наш скрипт <strong>SetEnv.cmd</strong> через ярлык и&nbsp;вставим туда команду, написанную выше.</p>
<div id="attachment_210" class="wp-caption aligncenter" style="width: 679px"><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/configure-0.png" alt="Выполнение конфигурирования" title="Выполнение конфигурирования" width="669" height="338" class="size-full wp-image-210" /><p class="wp-caption-text">Выполнение конфигурирования</p></div>
<p>После компилирования <strong>qmake.exe</strong> с&nbsp;его помощью будут созданы make-файлы для всех проектов (начиная от&nbsp;самой библиотеки Qt&nbsp;и&nbsp;заканчивая простейшими примерами). Здесь существует вероятность, что нет необходимости компилировать вообще всё подряд. К&nbsp;примеру нужна просто release-версия библиотеки для компилирования release-версий каких-либо программ. То&nbsp;есть не&nbsp;для разработки.</p>
<p>Если есть какая-то необходимость компилировать не&nbsp;весь Qt,&nbsp;а&nbsp;по&nbsp;частям, то&nbsp;используются специальные &laquo;флаги&raquo;, определённые в&nbsp;основном файле проекта Qt.&nbsp;Вот 2&nbsp;основных из&nbsp;них:</p>
<ol>
<li><strong>nmake sub-src</strong>&nbsp;&#8212; для компилирования только библиотек;</li>
<li><strong>nmake sub-tools</strong>&nbsp;&#8212; для компилирования всевозможных утилит (Designer, Linguist, Assistant, etc.).</li>
</ol>
<p>По завершению конфигурирования, создания <strong>qmake.exe</strong> и&nbsp;make-файлов для проекта, Qt&nbsp;скажет, что &laquo;Qt&nbsp;is&nbsp;now configured for building. Just run nmake. To&nbsp;reconfigure, run nmake confclean and configure&raquo;. Можно приступать к&nbsp;сборке <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Для того, чтобы начать компилирование просто введите <strong>nmake</strong> (или <strong>nmake sub-src</strong> и&nbsp;потом, если надо, <strong>nmake sub-tools</strong>) в&nbsp;зависимости от&nbsp;необходимого результата.</p>
<p>Если интересно, то&nbsp;я&nbsp;выполнил поочерёдно команды <strong>nmake sub-src</strong> и&nbsp;<strong>nmake sub-tools</strong> чтобы получить библиотеку с&nbsp;тулзами, но&nbsp;без ненужных примеров.</p>
<p><span style="font-size: 75%; color: gray;">&#8230;Прошло n-ое время, затраченное на&nbsp;компилирование нужных компонентов&#8230;</span></p>
<p>По завершению операций консоль не&nbsp;закрываем.</p>
<h2>Проверка работоспособности библиотеки</h2>
<p>Здесь всё просто. Раз мы&nbsp;собирали Qt&nbsp;в&nbsp;основном из-за модуля Phonon, то&nbsp;его и&nbsp;будем проверять.</p>
<p>Для этого выполним следующую команду, по&nbsp;завершении которой скомпилируется и&nbsp;запустится демо-приложение, использующее Phonon:</p>
<p><code><br />
<blockquote>cd demos/mediaplayer &#038;&#038; qmake &#038;&#038; nmake release &#038;&#038; cd release &#038;&#038; mediaplayer</p></blockquote>
<p></code></p>
<p>Через несколько секунд после завершения выполнения этого набора команд запуститься приложение. Откроем в&nbsp;нём какой-нибудь аудио файл, например: любимую песню <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  На&nbsp;этом моменте все поймут, работает Phonon или нет.</p>
<p><div id="attachment_212" class="wp-caption aligncenter" style="width: 334px"><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/mediaplayer-0.png" alt="Демо-приложение: Media Player" title="Демо-приложение: Media Player" width="324" height="181" class="size-full wp-image-212" /><p class="wp-caption-text">Демо-приложение: Media Player</p></div><br />
<a name="notes"></a><br />
<h2>Оговорки</h2>
<ul>
<li>В &laquo;Проверке работоспособности библиотеки&raquo; запуск приложения выполнен через консоль. Если попытаться запустить скомпилированную программу через проводник (при условии, что она находится <strong>не</strong>&nbsp;в&nbsp;директории <i>bin</i> Qt), то&nbsp;ничего не&nbsp;получится. Чтобы это исправить, необходимо перенести все переменные окружения из&nbsp;<strong>SetEnv.cmd</strong> в&nbsp;глобальное окружение ОС&nbsp;(Пуск -> Панель управления -> Система -> вкладка &laquo;Дополнительно&raquo; -> Переменные среды).</li>
<li>В случае возникновения ошибки при проверки работоспособности Phonon не&nbsp;следует огорчатся. Иногда так случается, что по&nbsp;каким-то причинам воспроизведение невозможно. Не&nbsp;знаю почему. просто попробуйте воспроизвести другой файл.</li>
</ul>
<p><a name="depend"></a><br />
<h2>О&nbsp;зависимостях</h2>
<p>Чтобы убрать зависимости от&nbsp;redistributable-пакетов необходимо заменить флаг <strong>-MD</strong> (<strong>-MDd</strong>) на&nbsp;<strong>-MT</strong> (<strong>-MTd</strong>).</p>
<p>Тут некоторые задумались на&nbsp;тему того, почему этот вопрос был вынесен из&nbsp;самой &laquo;инструкции&raquo; и&nbsp;являет собой нечто, похожее на&nbsp;дополнение. А&nbsp;кто-то, пропустив ссылку сюда сильно расстроен. Чтож, объясняю.</p>
<p>Использование флага <strong>-MT</strong> подразумевает собой &laquo;вшивание&raquo; кода runtime-библиотеки в&nbsp;конечный продукт (и&nbsp;в&nbsp;библиотеки, и&nbsp;в&nbsp;программы). Но&nbsp;при этом возникает обидная неожиданность: очень часто программы не&nbsp;работают. У&nbsp;меня лично хронически не&nbsp;запускался QtDesigner и&nbsp;lrelease (может что-нибудь ещё, а&nbsp;я&nbsp;просто не&nbsp;в&nbsp;курсе).</p>
<p>Именно по-этому я&nbsp;вынес этот вопрос сюда. В&nbsp;принципе, никто не&nbsp;мешает попытаться сделать <strong>-MT</strong> на&nbsp;более свежих версиях. У&nbsp;меня вот не&nbsp;срослось. Кстати, если надумали делать, то&nbsp;в&nbsp;OpenSSL тоже придётся внести небольшие изменения: в&nbsp;файле <em>ms\ntdll.mak</em> исправить <strong>/MD</strong> на&nbsp;<strong>/MT</strong>. Делать это необходимо после выполнения команды</p>
<blockquote><p><code>ms\do_masm</code></p></blockquote>
<p>О зависимостях готовых приложений можно почитать <a href="http://doc.qtsoftware.com/4.5/deployment-windows.html" target="_blank" title="Deploying an Application on Windows">тут [на англ.]</a>.</p>
<p><a href="#orientation">Вернуться вверх, к&nbsp;&laquo;Ориентируемся на&#8230;&raquo;</a></p>
]]></content:encoded>
			<wfw:commentRss>http://home.edstudio.net.ru/2009/06/compiling-qt-library-under-windows-os-with-support-for-phonon/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Халява от Canonical</title>
		<link>http://home.edstudio.net.ru/2009/06/free-from-canonical/</link>
		<comments>http://home.edstudio.net.ru/2009/06/free-from-canonical/#comments</comments>
		<pubDate>Sat, 20 Jun 2009 12:23:47 +0000</pubDate>
		<dc:creator>Erik</dc:creator>
				<category><![CDATA[Решения]]></category>
		<category><![CDATA[*ubuntu]]></category>
		<category><![CDATA[qt]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[ОСи]]></category>
		<category><![CDATA[халява]]></category>

		<guid isPermaLink="false">http://home.edstudio.net.ru/?p=178</guid>
		<description><![CDATA[Вот, ко&#160;мне пришёл 2-ой пакет с&#160;Свободным Программным Обеспечением от&#160;Canonical. В первом пакете я&#160;заказал kUbuntu&#160;&#8212; дистрибутив linux с&#160;оконным менеджером KDE4. Вторым пакетом мою коллекцию пополнили дистрибутивы Ubuntu&#160;&#8212; дистрибутив linux с&#160;оконным менеджером GNOME и&#160;Ubuntu Server&#160;&#8212; дистрибутив linux для серверных станций. Впринципе, можно не&#160;говорить, что каждая из&#160;этих операционных систем абсолютно бесплатная, и&#160;что Вы&#160;можете её&#160;скачать на&#160;сайте или закачать по&#160;почте [...]]]></description>
			<content:encoded><![CDATA[<p>Вот, ко&nbsp;мне пришёл 2-ой пакет с&nbsp;Свободным Программным Обеспечением от&nbsp;<a href="http://www.canonical.com/" title="Canonical Ltd." target="_blank">Canonical</a>.</p>
<p>В первом пакете я&nbsp;заказал <a href="http://www.kubuntu.org/" title="kUbuntu" tearget="_blank">kUbuntu</a>&nbsp;&#8212; дистрибутив linux с&nbsp;оконным менеджером <a href="http://www.kde.org/" title="K Desktop Envirement" target="_blank">KDE4</a>.</p>
<p>Вторым пакетом мою коллекцию пополнили дистрибутивы <a href="http://www.ubuntu.com/products/WhatIsUbuntu/desktopedition" title="Ubuntu Desktop Edition" target="_blank">Ubuntu</a>&nbsp;&#8212; дистрибутив linux с&nbsp;оконным менеджером <a href="http://www.gnome.org/" title="GNOME: The Free Software Desktop Project" target="_blank">GNOME</a> и&nbsp;<a href="http://www.ubuntu.com/products/WhatIsUbuntu/serveredition" title="Ubuntu Server Edition" target="_blank">Ubuntu Server</a>&nbsp;&#8212; дистрибутив linux для серверных станций.</p>
<p><span id="more-178"></span></p>
<p>Впринципе, можно не&nbsp;говорить, что каждая из&nbsp;этих операционных систем абсолютно бесплатная, и&nbsp;что Вы&nbsp;можете её&nbsp;скачать на&nbsp;сайте или закачать по&nbsp;почте с&nbsp;помощью бесплатной услуги ShipIt (ссылки на&nbsp;страницы проекта я&nbsp;давать не&nbsp;буду, Вы&nbsp;сможете и&nbsp;так легко найти их&nbsp;на&nbsp;сайте интересующего Вас дистрибутива).</p>
<p>Сами диски:</p>

<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/ubuntu-cover/' title='Ubuntu Desktop Edition: Обложка'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/ubuntu-cover.jpg" class="attachment-thumbnail" alt="Ubuntu Desktop Edition: Обложка" title="Ubuntu Desktop Edition: Обложка" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/ubuntu-inside/' title='Ubuntu Desktop Edition: Разворот'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/ubuntu-inside.jpg" class="attachment-thumbnail" alt="Ubuntu Desktop Edition: Разворот" title="Ubuntu Desktop Edition: Разворот" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/ubuntu-cd/' title='Ubuntu Desktop Edition: Диск'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/ubuntu-cd.jpg" class="attachment-thumbnail" alt="Ubuntu Desktop Edition: Диск" title="Ubuntu Desktop Edition: Диск" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/ubuntu-server-cover/' title='Ubuntu Server Edition: Обложка'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/ubuntu-server-cover.jpg" class="attachment-thumbnail" alt="Ubuntu Server Edition: Обложка" title="Ubuntu Server Edition: Обложка" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/ubuntu-server-inside/' title='Ubuntu Server Edition: Разворот'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/ubuntu-server-inside.jpg" class="attachment-thumbnail" alt="Ubuntu Server Edition: Разворот" title="Ubuntu Server Edition: Разворот" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/ubuntu-server-cd/' title='Ubuntu Server Edition: Диск'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/ubuntu-server-cd.jpg" class="attachment-thumbnail" alt="Ubuntu Server Edition: Диск" title="Ubuntu Server Edition: Диск" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/kubuntu-cover/' title='kUbuntu: Обложка'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/kubuntu-cover.jpg" class="attachment-thumbnail" alt="kUbuntu: Обложка" title="kUbuntu: Обложка" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/kubuntu-inside/' title='kUbuntu: Разворот'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/kubuntu-inside.jpg" class="attachment-thumbnail" alt="kUbuntu: Разворот" title="kUbuntu: Разворот" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/kubuntu-cd/' title='kUbuntu: Диск'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/kubuntu-cd.jpg" class="attachment-thumbnail" alt="kUbuntu: Диск" title="kUbuntu: Диск" /></a>
<a href='http://home.edstudio.net.ru/2009/06/free-from-canonical/bonus/' title='Бонусы: наклейки с логотипом Ubuntu (4 штуки)'><img src="http://home.edstudio.net.ru/wp-content/uploads/2009/06/bonus.jpg" class="attachment-thumbnail" alt="Бонусы: наклейки с логотипом Ubuntu (4 штуки)" title="Бонусы: наклейки с логотипом Ubuntu (4 штуки)" /></a>

<p>P.S.: собственно, я&nbsp;и&nbsp;пост создал чтобы обложки показать. На&nbsp;мой взгляд они достаточно красивые <img src='http://home.edstudio.net.ru/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://home.edstudio.net.ru/2009/06/free-from-canonical/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
