User Tools

Site Tools


mingw32

This is an old revision of the document!


Инструкция по сборке Psi+ в ОС MS Windows (MinGW)

Необходимый инструментарий

1. Qt libraries 4.8.6 for Windows (minGW v4.8.2) или скачать с основной страницы загрузок ~330 MB

2. MinGW v4.8.2 ~45 MB

2. MinGW-gcc-4.4.0-2 ~15 MB

3. CMake build system (win32) – скомпилированную версию 3.0.0 можно взять здесь ~14 MB

4. Git for Windows - набор утилит для работы с Git (из состава msysGit) ~12 MB

5. OpenSSL – архив с исходным кодом пакета программ для поддержки шифрования и криптографии (версия > 1.0.0) ~4 MB

6. Aspell Libs for MinGW - библиотеки для обеспечения работы функционала проверки орфографии, необходимые для сборки файлы можно взять здесь ~0.5 MB

7. GNU IDN Library (LibIDN) – скомпилированную версию (v1.28) можно взять здесь или здесь ~0.5 MB

8. QConf – утилита конфигурирования проекта перед сборкой (скомпилированную версию можно взять здесь) ~0.1 MB

9. Zlib for Windows (скомпилированную версию можно взять здесь) (v1.2.8) ~0.05 MB

10. Qt Cryptographic Architecture Libs (QCA) (скомпилированную версию можно взять здесь) ~0.01 MB

11. GnuPG (Package for Windows) - свежий win32-инсталлятор можно взять здесь

Опционально:

  • TortoiseGit - надстройка для проводника MS Windows ~20 MB
  • Python – только версии 2.x.x (x86) ~15 MB
  • ccache version 3.1утилита для ускорения процесса компиляции ~0.2 MB
    • Примечание: для нормальной работы ccache необходимо прописать переменную CCACHE_DIR в переменных окружения.

Подготовка к сборке, настройка переменных окружения и необходимых библиотек

  • Устанавливаем необходимый инструментарий, указанный выше. Git рекомендуется устанавливать в корень диска, например, в C:\Git
  • Создаём в папке C:\MinGW\bin новый файл make.exe путём копирования и переименования из файла mingw32-make.exe (ВРЕМЕННЫЙ КОСТЫЛЬ)
  • Распаковываем папки include и lib из архива lyx-windows-deps-mingw-small.zip в папку C:\MinGW
  • Распаковываем содержимое архива zlib-1.2.8-win32.7z в папку C:\Qt\zlib
  • Распаковываем содержимое архива libidn-1.28-win32.zip в папку C:\Qt\LibIDN
  • Скачиваем и распаковываем содержимое архива otrplugin-deps-mingw-win32.7z следующим образом:
    • файлы из папки bin копируем в папку Psi+ (например, C:\Program Files (x86)\Psi+)
    • папки include и lib копируем в папку C:\MinGW\i686-w64-mingw32
  • Распаковываем утилиту ccache.exe и библиотеку zlib1.dll из архива ccache-3.1-win32.7z в папку C:\MinGW\bin
  • Редактируем строки QMAKE_CC и QMAKE_CXX в файле C:\Qt\4.8.6\mkspecs\win32-g++\qmake.conf (дописываем ccache в следующих строках)

<code> …….. QMAKE_CC = ccache $${CROSS_COMPILE}gcc …….. QMAKE_CXX = ccache $${CROSS_COMPILE}g++ </code>

  • В свойствах компьютера (Start → Settings → Control Panel → System Properties → Advanced → Environment Variables) добавляем необходимые пути в системную переменную PATH (при необходимости пути следует заменить на свои):
C:\>path
PATH=C:\MinGW\bin;C:\Qt\QConf;C:\cmake\bin;C:\Program Files (x86)\GNU\GnuPG\pub

А также создаём новые системные переменные (при необходимости заменив пути на свои):

GITDIR=C:\Git
LIBIDNDIR=C:\Qt\LibIDN
MINGWDIR=C:\MinGW
OPENSSLDIR=C:\OpenSSL
QCADIR=C:\Qt\QCA
QCONFDIR=C:\Qt\QConf
QMAKESPEC=win32-g++
QTDIR=C:\Qt\4.8.6
ZLIBDIR=C:\Qt\zlib

Примечание 1: Переменные обновятся только для вновь запущенных процессов, т.е. требуется перезапустить cmd с правами администратора (в крайнем случае - перезагрузить систему).

Примечание 2: Если у вас закрыт доступ наружу по порту 9418, то вы не сможете скачать исходный код Psi и Psi+ по протоколу git://. В этом случае рекомендуется в глобальном конфиге Git добавить следующий параметр:

C:\Git\bin\git config --global url."https://".insteadOf git://

Проверка правильной установки и работоспособности Qt на примере сборки тестовой программы

  • Запускаем командную строку cmd.exe с правами администратора (Start → Run → cmd)
  • Проверяем правильность установки путей и переменных командой:
C:\Qt\4.8.6\bin\qmake -v

Видим следующее:

C:\>C:\Qt\4.8.6\bin\qmake -v
QMake version 2.01a
Using Qt version 4.8.6 in C:\Qt\4.8.6\lib

А также командой:

echo %QMAKESPEC%

Видим ответ:

C:\>echo %QMAKESPEC%
win32-g++
  • Меняем рабочую папку на C:\Qt\4.8.6\examples\tutorials\addressbook\part1 командой:
cd C:\Qt\4.8.6\examples\tutorials\addressbook\part1
  • Выполняем команду:
C:\Qt\4.8.6\bin\qmake part1.pro
  • Затем выполняем команду:
mingw32-make -f makefile.release

Видим следующее:

C:\Qt\4.8.6\examples\tutorials\addressbook\part1>mingw32-make -f makefile.releas
e
g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL
-DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M
MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include
\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"..\..\..\..\in
clude\ActiveQt" -I"release" -I"..\..\..\..\mkspecs\win32-g++" -o release\address
book.o addressbook.cpp
g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL
-DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M
MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include
\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"..\..\..\..\in
clude\ActiveQt" -I"release" -I"..\..\..\..\mkspecs\win32-g++" -o release\main.o
main.cpp
C:\Qt\4.8.6\bin\moc.exe -DUNICODE -DQT_DLL -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_
LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPP
ORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include\QtCore" -I"..\..\..\..\include\QtGui
" -I"..\..\..\..\include" -I"..\..\..\..\include\ActiveQt" -I"release" -I"..\..\
..\..\mkspecs\win32-g++" -D__GNUC__ -DWIN32 addressbook.h -o release\moc_address
book.cpp
g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL
-DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M
MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"..\..\..\..\include
\QtCore" -I"..\..\..\..\include\QtGui" -I"..\..\..\..\include" -I"..\..\..\..\in
clude\ActiveQt" -I"release" -I"..\..\..\..\mkspecs\win32-g++" -o release\moc_add
ressbook.o release\moc_addressbook.cpp
g++ -Wl,-s -mthreads -Wl,-subsystem,windows -o release\part1.exe release/address
book.o release/main.o release/moc_addressbook.o  -L"c:\Qt\4.8.6\lib" -lmingw32 -
lqtmain -lQtGui4 -lQtCore4

Результат сборки release-версии тестового приложения в виде исполняемого файла part1.exe наблюдаем в папке C:\Qt\4.8.6\examples\tutorials\addressbook\part1\release

Успешная сборка тестового приложения означает, что Qt правильно установлена и готова к использованию.

Компиляция OpenSSL Toolkit v1.0.x

Важно! Данный алгоритм справедлив для версий OpenSSL выше v1.0.x.

  • Создаём рабочую папку C:\build\openssl
  • Распаковываем архив с исходниками OpenSSL v1.0.x (из Пункта №5 необходимого инструментария) в папку C:\build\openssl
  • Запускаем от имени Администратора Git Bash (идёт в комплекте с Git) в папке C:\build\openssl и последовательно выполняем следующие команды. Сначала конфигурируем проект:
MAKE=mingw32-make PERL=perl.exe ./config --prefix=/c/OpenSSL shared

Видим процесс конфигурирования проекта:

...........................
making links in ssl...
mingw32-make[1]: Entering directory `c:/build/openssl/ssl'
ssl.h => ../include/openssl/ssl.h
ssl2.h => ../include/openssl/ssl2.h
ssl3.h => ../include/openssl/ssl3.h
ssl23.h => ../include/openssl/ssl23.h
tls1.h => ../include/openssl/tls1.h
dtls1.h => ../include/openssl/dtls1.h
kssl.h => ../include/openssl/kssl.h
srtp.h => ../include/openssl/srtp.h
ssltest.c => ../test/ssltest.c
mingw32-make[1]: Leaving directory `c:/build/openssl/ssl'
making links in engines...
mingw32-make[1]: Entering directory `c:/build/openssl/engines'
making links in engines/ccgost...
mingw32-make[2]: Entering directory `c:/build/openssl/engines/ccgost'
mingw32-make[2]: Nothing to be done for `links'.
mingw32-make[2]: Leaving directory `c:/build/openssl/engines/ccgost'
mingw32-make[1]: Leaving directory `c:/build/openssl/engines'
making links in apps...
mingw32-make[1]: Entering directory `c:/build/openssl/apps'
mingw32-make[1]: Nothing to be done for `links'.
mingw32-make[1]: Leaving directory `c:/build/openssl/apps'
making links in test...
mingw32-make[1]: Entering directory `c:/build/openssl/test'
mingw32-make[1]: Nothing to be done for `links'.
mingw32-make[1]: Leaving directory `c:/build/openssl/test'
making links in tools...
mingw32-make[1]: Entering directory `c:/build/openssl/tools'
mingw32-make[1]: Nothing to be done for `links'.
mingw32-make[1]: Leaving directory `c:/build/openssl/tools'
generating dummy tests (if needed)...
mingw32-make[1]: Entering directory `c:/build/openssl/test'
mingw32-make[1]: Nothing to be done for `generate'.
mingw32-make[1]: Leaving directory `c:/build/openssl/test'

Configured for mingw.

Далее запускаем компиляцию:

mingw32-make

Видим процесс компиляции:

..................................
gcc -I.. -I../include  -D_WINDLL -DOPENSSL_USE_APPLINK -DOPENSSL_PIC -DOPENSSL_T
HREADS -D_MT -DDSO_WIN32 -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer -
O3 -march=i486 -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_B
N_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM
-DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM   -c -o asn1test.
o asn1test.c
mingw32-make[2]: Entering directory `c:/build/openssl/test'
mingw32-make[2]: Leaving directory `c:/build/openssl/test'
gcc -I.. -I../include  -D_WINDLL -DOPENSSL_USE_APPLINK -DOPENSSL_PIC -DOPENSSL_T
HREADS -D_MT -DDSO_WIN32 -DL_ENDIAN -DWIN32_LEAN_AND_MEAN -fomit-frame-pointer -
O3 -march=i486 -Wall -DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_IA32_SSE2 -DOPENSSL_B
N_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM
-DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM   -c -o dummytest
.o dummytest.c
mingw32-make[2]: Entering directory `c:/build/openssl/test'
mingw32-make[2]: Leaving directory `c:/build/openssl/test'
mingw32-make[1]: Leaving directory `c:/build/openssl/test'
making all in tools...
mingw32-make[1]: Entering directory `c:/build/openssl/tools'
mingw32-make[1]: Nothing to be done for `all'.
mingw32-make[1]: Leaving directory `c:/build/openssl/tools'

Примечание: Если при выполнении команды mingw32-make получаем ошибку компиляции тестов, то в папке C:\build\openssl открываем файл Makefile, находим строку:

build_all: build_libs build_apps build_tests build_tools

и удаляем из неё параметр build_tests. Далее продолжаем компиляцию командой mingw32-make.

И в завершении выполняем команду:

mingw32-make install

Видим процесс инсталляции:

.........................................
making install in tools...
mingw32-make[1]: Entering directory `c:/build/openssl/tools'
mingw32-make[1]: Leaving directory `c:/build/openssl/tools'
installing libcrypto.a
installing libssl.a
installing libcrypto.dll.a
installing libeay32.dll
installing libssl.dll.a
installing ssleay32.dll
mingw32-make[1]: Entering directory `c:/OpenSSL/lib'
mingw32-make[2]: Entering directory `c:/OpenSSL/lib'
mingw32-make[2]: Nothing to be done for `symlink.cygwin-shared'.
mingw32-make[2]: Leaving directory `c:/OpenSSL/lib'
mingw32-make[2]: Entering directory `c:/OpenSSL/lib'
mingw32-make[2]: Nothing to be done for `symlink.cygwin-shared'.
mingw32-make[2]: Leaving directory `c:/OpenSSL/lib'
mingw32-make[1]: Leaving directory `c:/OpenSSL/lib'
OpenSSL shared libraries have been installed in:
  /c/OpenSSL

If this directory is not in a standard system path for dynamic/shared
libraries, then you will have problems linking and executing
applications that use OpenSSL libraries UNLESS:

* you link with static (archive) libraries.  If you are truly
  paranoid about security, you should use static libraries.
* you use the GNU libtool code during linking
  (http://www.gnu.org/software/libtool/libtool.html)
* you use pkg-config during linking (this requires that
  PKG_CONFIG_PATH includes the path to the OpenSSL shared
  library directory), and make use of -R or -rpath.
  (http://www.freedesktop.org/software/pkgconfig/)
* you specify the system-wide link path via a command such
  as crle(1) on Solaris systems.
* you add the OpenSSL shared library directory to /etc/ld.so.conf
  and run ldconfig(8) on Linux systems.
* you define the LD_LIBRARY_PATH, LIBPATH, SHLIB_PATH (HP),
  DYLD_LIBRARY_PATH (MacOS X) or PATH (Cygwin and DJGPP)
  environment variable and add the OpenSSL shared library
  directory to it.

One common tool to check the dynamic dependencies of an executable
or dynamic library is ldd(1) on most UNIX systems.

See any operating system documentation and manpages about shared
libraries for your version of UNIX.  The following manpages may be
helpful: ld(1), ld.so(1), ld.so.1(1) [Solaris], dld.sl(1) [HP],
ldd(1), crle(1) [Solaris], pldd(1) [Solaris], ldconfig(8) [Linux],
chatr(1) [HP].
cp libcrypto.pc /c/OpenSSL/lib/pkgconfig
chmod 644 /c/OpenSSL/lib/pkgconfig/libcrypto.pc
cp libssl.pc /c/OpenSSL/lib/pkgconfig
chmod 644 /c/OpenSSL/lib/pkgconfig/libssl.pc
cp openssl.pc /c/OpenSSL/lib/pkgconfig
chmod 644 /c/OpenSSL/lib/pkgconfig/openssl.pc

В результате компиляции и инсталляции пакета OpenSSL Toolkit v1.0.x получаем скомпилированные библиотеки libeay32.dll и ssleay32.dll в папке C:\OpenSSL\bin, а также заголовочные файлы в папке C:\OpenSSL\include\openssl и служебные библиотеки для линковки в папке C:\OpenSSL\lib.

Теперь пакет OpenSSL Toolkit v1.0.x готов для линковки и сборки Psi+. Временную папку сборки C:\build\openssl можно удалить.

Компиляция утилиты конфигурирования QConf

  • Запускаем от имени Администратора Git Bash (идёт в комплекте с Git) в рабочей папке C:\build
  • Задаём необходимые пути:
PATH=$PATH:/c/qt/4.8.6/bin/
  • Скачиваем исходный код QConf командой:
git clone https://github.com/psi-plus/qconf.git

Видим процесс скачивания:

$ git clone https://github.com/psi-plus/qconf.git
Cloning into 'qconf'...
remote: Reusing existing pack: 239, done.
Receiving objremote: Total 239 (delta 0), reused 0 (delta 0)ects:  86% (206/239)
R
Receiving objects: 100% (239/239), 82.14 KiB | 0 bytes/s, done.
Resolving deltas: 100% (152/152), done.
Checking connectivity... done.
  • Далее переходим в папку C:\build\qconf и выполняем конфигурирование проекта командой:
./configure

Видим процесс конфигурирования проекта:

$ ./configure
Configuring QConf ...
Verifying Qt 4 build environment ... ok

Good, your configure finished.  Now run make.
  • Далее запускаем компиляцию:
mingw32-make -f makefile.release

Видим процесс компиляции:

$ mingw32-make -f makefile.release
g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL
-DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M
MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I'../../Qt/4.8.6/include/QtCore' -I'..
/../Qt/4.8.6/include/QtXml' -I'../../Qt/4.8.6/include' -I'../../Qt/4.8.6/include
/ActiveQt' -I'release' -I'../../Qt/4.8.6/mkspecs/win32-g++' -o release/stringhel
p.o src/stringhelp.cpp
g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL
-DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M
MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I'../../Qt/4.8.6/include/QtCore' -I'..
/../Qt/4.8.6/include/QtXml' -I'../../Qt/4.8.6/include' -I'../../Qt/4.8.6/include
/ActiveQt' -I'release' -I'../../Qt/4.8.6/mkspecs/win32-g++' -o release/qconf.o s
rc/qconf.cpp
c:/Qt/4.8.6/bin/rcc.exe -name qconf src/qconf.qrc -o release/qrc_qconf.cpp
g++ -c -pipe -O2 -frtti -fexceptions -mthreads -Wall -Wextra -DUNICODE -DQT_DLL
-DQT_NO_DEBUG -DQT_XML_LIB -DQT_CORE_LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_M
MXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPPORT -I'../../Qt/4.8.6/include/QtCore' -I'..
/../Qt/4.8.6/include/QtXml' -I'../../Qt/4.8.6/include' -I'../../Qt/4.8.6/include
/ActiveQt' -I'release' -I'../../Qt/4.8.6/mkspecs/win32-g++' -o release/qrc_qconf
.o release/qrc_qconf.cpp
g++ -Wl,-s -Wl,-subsystem,console -mthreads -o qconf.exe release/stringhelp.o re
lease/qconf.o release/qrc_qconf.o  -L'c:/Qt/4.8.6/lib' -lQtXml4 -lQtCore4
  • Копируем из рабочей папки C:\build\qconf вложенные папки conf и modules, а также файл qconf.exe во вновь созданную папку назначения C:\Qt\QConf

Теперь утилита конфигурирования QConf готова для конфигурирования проекта Psi+.

Если по каким-либо причинам не получается самостоятельно скомпилировать утилиту QConf, то можно воспользоваться уже готовой версией утилиты, распаковав содержимое архива в рабочую папку C:\Qt\QConf.

ВАЖНО!

Далее для работы с QConf в папке C:\Qt\QConf необходимо создать файл qconf.cmd следующего вида (в кодировке ANSI или UTF-8 (без BOM)):

@set PATH=%PATH%;%QTDIR%\bin&C:\Qt\QConf\qconf.exe %*

и при конфигурировании проекта вызывать именно его. Например:

........
call qconf.cmd
........

Временную папку сборки C:\build\qconf можно удалить.

Компиляция Qt Cryptographic Architecture (QCA)

  • Запускаем от имени Администратора CMD в рабочей папке C:\build
  • Скачиваем исходный код QCA из официального git-репозитория:
C:\Git\bin\git clone git://anongit.kde.org/qca.git

Видим процесс скачивания:

$ git clone git://anongit.kde.org/qca.git
Cloning into 'qca'...
remote: Counting objects: 14036, done.
remote: Compressing objects: 100% (5391/5391), done.
remote: Total 14036 (delta 8820), reused 13132 (delta 8167)
Receiving objects: 100% (14036/14036), 18.19 MiB | 5.00 MiB/s, done.
Resolving deltas: 100% (8820/8820), done.
Checking connectivity... done.
Checking out files: 100% (467/467), done.
  • Переходим в папку C:\build\qca и конфигурируем проект перед сборкой:
cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=%QCADIR% -DCMAKE_BUILD_TYPE=Release -DBUILD_PLUGINS=ossl;gnupg

Видим следующее:

C:\build\qca>cmake -G "MinGW Makefiles" -DCMAKE_INSTALL_PREFIX=%QCADIR% -DCMAKE_
BUILD_TYPE=Release -DBUILD_PLUGINS=ossl;gnupg
-- Could NOT find Doxygen (missing:  DOXYGEN_EXECUTABLE)
-- Checking for certstore..
-- Using built in certstore.
-- certstore path: C:/build/qca/certs/rootcerts.pem
-- mlock(2) does not take a void *
CMake Warning at plugins/qca-ossl/CMakeLists.txt:18 (message):
  qca-ossl will be compiled without MD2 digest algorithm support

Plugins:
  qca-botan off
  qca-cyrus-sasl off
  qca-gcrypt off
  qca-gnupg on
  qca-logger off
  qca-nss off
  qca-ossl on
  qca-pkcs11 off
  qca-softstore off

QCA prefix is C:/Qt/QCA
Plugins will be installed to C:/Qt/QCA/lib/qca/crypto
Binary will be installed to C:/Qt/QCA/bin
Library will be installed to C:/Qt/QCA/lib
Feature file will be installed to C:/Qt/QCA/mkspecs/features
Public headers will be installed to C:/Qt/QCA/include
Private headers will be installed to C:/Qt/QCA/include
Documentation will be installed to C:/Qt/QCA/share/doc/qca/html
Man page will be installed to C:/Qt/QCA/share/man
Pkg-config file will be installed to C:/Qt/QCA/lib/pkgconfig

-- Configuring done
-- Generating done
-- Build files have been written to: C:/build/qca
  • После успешного конфигурирования проекта запускаем сборку командой:
mingw32-make

Видим процесс компиляции:

................................
[ 95%] Generating ssltest.moc
Scanning dependencies of target ssltest
[ 95%] Building CXX object examples/ssltest/CMakeFiles/ssltest.dir/ssltest.cpp.o
bj
Linking CXX executable ..\..\bin\ssltest.exe
[ 95%] Built target ssltest
[ 95%] Generating sslservtest.moc
Scanning dependencies of target sslservtest
[ 96%] Building CXX object examples/sslservtest/CMakeFiles/sslservtest.dir/sslse
rvtest.cpp.obj
Linking CXX executable ..\..\bin\sslservtest.exe
[ 96%] Built target sslservtest
[ 97%] Generating tlssocket.moc
Scanning dependencies of target tlssocket
[ 98%] Building CXX object examples/tlssocket/CMakeFiles/tlssocket.dir/tlssocket
.cpp.obj
[ 98%] Building CXX object examples/tlssocket/CMakeFiles/tlssocket.dir/main.cpp.
obj
Linking CXX executable ..\..\bin\tlssocket.exe
[ 98%] Built target tlssocket
Scanning dependencies of target mozcerts
[ 99%] Building CXX object tools/mozcerts/CMakeFiles/mozcerts.dir/main.cpp.obj
Linking CXX executable ..\..\bin\mozcerts.exe
[ 99%] Built target mozcerts
[100%] Generating main.moc
Scanning dependencies of target qcatool
[100%] Building CXX object tools/qcatool/CMakeFiles/qcatool.dir/main.cpp.obj
Linking CXX executable ..\..\bin\qcatool.exe
[100%] Built target qcatool
  • Теперь запускаем установку компонентов QCA в заданную при конфигурировании папку:
mingw32-make install

Видим процесс установки:

................................
[ 95%] Built target ssltest
[ 96%] Built target sslservtest
[ 98%] Built target tlssocket
[ 99%] Built target mozcerts
[100%] Built target qcatool
Install the project...
-- Install configuration: "Release"
-- Installing: C:/Qt/QCA/certs/rootcerts.pem
-- Installing: C:/Qt/QCA/include/QtCrypto/qca.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qcaprovider.h
-- Installing: C:/Qt/QCA/include/QtCrypto/QtCrypto
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_export.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_support.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_tools.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_core.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_textfilter.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_basic.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_publickey.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_cert.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_keystore.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_securelayer.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_securemessage.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qca_version.h
-- Installing: C:/Qt/QCA/include/QtCrypto/qpipe.h
-- Installing: C:/Qt/QCA/mkspecs/features/crypto.prf
-- Installing: C:/Qt/QCA/share/man/man1/qcatool.1
-- Installing: C:/Qt/QCA/lib/libqca.dll.a
-- Installing: C:/Qt/QCA/bin/libqca.dll
-- Installing: C:/Qt/QCA/lib/qca/crypto/libqca-gnupg.dll
-- Installing: C:/Qt/QCA/lib/qca/crypto/libqca-ossl.dll
-- Installing: C:/Qt/QCA/bin/mozcerts.exe
-- Installing: C:/Qt/QCA/bin/qcatool.exe

* Копируем из рабочей папки C:\build\qca файл crypto.prf в папку C:\Qt\4.8.5\mkspecs\features

Теперь комплект QCA готов для конфигурирования и сборки проекта Pi+.

Если по каким-либо причинам не получается самостоятельно скомпилировать QCA, то можно воспользоваться уже готовой версией, распаковав содержимое архива в рабочую папку C:\Qt\QCA.

Компиляция zlib

  • Скачиваем исходный код zlib-1.2.8 отсюда
  • Распаковываем содержимое архива zlib-1.2.8.tar.gz во временную рабочую папку C:\build\zlib
  • Запускаем от имени Администратора Git Bash в папке C:\build\zlib
  • Выполняем команду:
mingw32-make -f win32/Makefile.gcc

Видим процесс компиляции:

$ mingw32-make -f win32/Makefile.gcc
gcc  -O3 -Wall -c -o adler32.o adler32.c
gcc  -O3 -Wall -c -o compress.o compress.c
gcc  -O3 -Wall -c -o crc32.o crc32.c
gcc  -O3 -Wall -c -o deflate.o deflate.c
gcc  -O3 -Wall -c -o gzclose.o gzclose.c
gcc  -O3 -Wall -c -o gzlib.o gzlib.c
gcc  -O3 -Wall -c -o gzread.o gzread.c
gcc  -O3 -Wall -c -o gzwrite.o gzwrite.c
gcc  -O3 -Wall -c -o infback.o infback.c
gcc  -O3 -Wall -c -o inffast.o inffast.c
gcc  -O3 -Wall -c -o inflate.o inflate.c
gcc  -O3 -Wall -c -o inftrees.o inftrees.c
gcc  -O3 -Wall -c -o trees.o trees.c
gcc  -O3 -Wall -c -o uncompr.o uncompr.c
gcc  -O3 -Wall -c -o zutil.o zutil.c
ar rcs libz.a adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o
gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o
windres --define GCC_WINDRES -o zlibrc.o win32/zlib1.rc
gcc -shared -Wl,--out-implib,libz.dll.a  \
        -o zlib1.dll win32/zlib.def adler32.o compress.o crc32.o deflate.o gzclo
se.o gzlib.o gzread.o gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o
 uncompr.o zutil.o  zlibrc.o
Creating library file: libz.dll.a
strip zlib1.dll
gcc  -O3 -Wall -I. -c -o example.o test/example.c
gcc  -o example.exe example.o libz.a
strip example.exe
gcc  -O3 -Wall -I. -c -o minigzip.o test/minigzip.c
gcc  -o minigzip.exe minigzip.o libz.a
strip minigzip.exe
gcc  -o example_d.exe example.o libz.dll.a
strip example_d.exe
gcc  -o minigzip_d.exe minigzip.o libz.dll.a
strip minigzip_d.exe

В результате компиляции наблюдаем в рабочей папке C:\build\zlib готовую к употреблению библиотеку zlib1.dll, а также служебные файлы zconf.h, zlib.h, libz.a и libz.dll.a

Копируем из папки C:\build\zlib следующие файлы:

  • zlib1.dll в папку C:\Qt\zlib\bin
  • zconf.h и zlib.h в папку C:\Qt\zlib\include
  • libz.a и libz.dll.a в папку C:\Qt\zlib\lib

После этого временную рабочую папку C:\build\zlib можно удалить.

Теперь комплект zlib готов для конфигурирования и сборки проекта Pi+.

<del>Компиляция утилиты ccache</del>

Подробную инструкцию по сборке утилиты ccache можно найти здесь.

Сборка Psi+ в автоматическом режиме (рекомендуется)

  • Скачиваем скрипт auto-compiler-all-in-one.cmd в новую папку (например, C:\build)
  • Включаем необходимый для сборки параметр MakeClassic в положение 1 (если он ещё не включен):
SET MakeClassic=1
SET UploadClassic=0
SET MakeClassicDebug=0
SET UploadClassicDebug=0
SET MakeWebkit=0
SET UploadWebkit=0
SET MakeWebkitDebug=0
SET UploadWebkitDebug=0
SET MakePlugins=0
SET UploadPlugins=0
SET MakePluginsDebug=0
SET UploadPluginsDebug=0
  • Запускаем скрипт auto-compiler-all-in-one.cmd в папке C:\build и ждём окончания его выполнения

Если скрипт отработал успешно, то в рабочей папке C:\build появится архив, содержащий скомпилированный и готовый к работе бинарный файл psi-plus.exe.

Компиляция плагинов Psi+

  • Скачиваем скрипт auto-compiler-all-in-one.cmd в новую папку (например, C:\build)
  • Включаем необходимый для сборки параметр MakePlugins в положение 1:
SET MakeClassic=0
SET UploadClassic=0
SET MakeClassicDebug=0
SET UploadClassicDebug=0
SET MakeWebkit=0
SET UploadWebkit=0
SET MakeWebkitDebug=0
SET UploadWebkitDebug=0
SET MakePlugins=1
SET UploadPlugins=0
SET MakePluginsDebug=0
SET UploadPluginsDebug=0
  • Запускаем скрипт auto-compiler-all-in-one.cmd в папке C:\build и ждём окончания его выполнения

Если скрипт отработал успешно, то в рабочей папке C:\build появится архив, содержащий скомпилированные и готовые к работе плагины Psi+.

Полезные ссылки

mingw32.1409581283.txt.gz · Last modified: 2014/09/01 14:21 by zet

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki