mingw32
Differences
This shows you the differences between two versions of the page.
mingw32 [2014/06/18 12:55] – zet | mingw32 [2024/06/16 11:46] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 3: | Line 3: | ||
===== Необходимый инструментарий ===== | ===== Необходимый инструментарий ===== | ||
- | 1. **[[http://master.qt-project.org/official_releases/ | + | 1. **[[http://www.cmake.org/|CMake build system]]** -- версию 3.7.2 можно взять |
- | 2. **[[http://sourceforge.net/projects/psiplus/files/MS-Windows/Dev/MinGW-i686-4.8.2-release-posix-dwarf-rt_v3-rev3.7z/download|MinGW v4.8.2]]** //~45 MB// | + | 2. **[[https://github.com/git-for-windows/git/releases|Git for Windows]]** |
- | < | + | 3. **[[http://www.openssl.org/source/|OpenSSL]]** |
- | 3. **[[http:// | + | 4. **[[http:// |
- | 4. **[[https://github.com/msysgit/ | + | 5. **[[http://www.zlib.net/|Zlib for Windows]]** |
- | 5. **[[http:// | + | 8. **[[http:// |
- | + | ||
- | 6. **[[http:// | + | |
- | + | ||
- | 7. **[[http:// | + | |
- | + | ||
- | 8. **[[http:// | + | |
- | + | ||
- | 9. **[[http:// | + | |
- | + | ||
- | 10. **[[http:// | + | |
- | + | ||
- | 11. **[[http:// | + | |
**__Опционально__: | **__Опционально__: | ||
- | * **[[http://download.tortoisegit.org/tgit/|TortoiseGit]]** | + | * **[[https://github.com/zdenop/hunspell-mingw|Hunspell for MinGW]]** - библиотека проверки орфографии |
- | * < | + | |
- | * < | + | |
- | * < | + | |
Line 37: | Line 22: | ||
- | ===== Подготовка к сборке, | ||
- | * Устанавливаем необходимый инструментарий, | ||
- | * Создаём в папке **C: | ||
- | * Распаковываем папки **include** и **lib** из архива **[[http:// | ||
- | * Распаковываем содержимое архива **[[http:// | ||
- | * Распаковываем содержимое архива **[[http:// | ||
- | * Скачиваем и распаковываем содержимое архива **[[http:// | ||
- | * содержимое папки **bin** -- в рабочую папку **Psi+** (например, | ||
- | * папки **include** и **lib** -- в папку **C: | ||
- | * < | ||
- | * < | ||
- | < | ||
- | ........ | ||
- | QMAKE_CC = ccache | ||
- | ........ | ||
- | QMAKE_CXX = ccache $${CROSS_COMPILE}g++ | ||
- | </ | ||
- | * В свойствах компьютера (Start → Settings → Control Panel → System Properties → Advanced → Environment Variables) добавляем необходимые пути в системную переменную [[http:// | ||
- | < | ||
- | C:\>path | ||
- | </ | ||
- | < | + | ===== Компиляция OpenSSL |
- | PATH=C: | + | |
- | </ | + | |
- | А также создаём новые системные переменные __(при необходимости заменив пути на свои)__: | + | |
- | < | + | |
- | GITDIR=C: | + | |
- | LIBIDNDIR=C: | + | |
- | MINGWDIR=C: | + | |
- | OPENSSLDIR=C: | + | |
- | QCADIR=C:\Qt\QCA | + | |
- | QCONFDIR=C: | + | |
- | QMAKESPEC=win32-g++ | + | |
- | QTDIR=C: | + | |
- | ZLIBDIR=C: | + | |
- | </ | + | |
- | **__Примечание 1:__** Переменные обновятся только для вновь запущенных процессов, | + | __**Важно!**__ Данный алгоритм справедлив для версий OpenSSL выше v1.x.x. |
- | **__Примечание 2:__** Если у вас | + | |
+ | * Распаковываем архив | ||
+ | | ||
< | < | ||
- | C: | + | MAKE=mingw32-make PERL=perl.exe ./config --prefix=/c/OpenSSL shared |
</ | </ | ||
- | + | По завершении | |
- | + | ||
- | + | ||
- | ===== Проверка правильной установки и работоспособности Qt на примере сборки тестовой программы ===== | + | |
- | + | ||
- | * Запускаем командную строку **cmd.exe** с правами администратора (Start → Run → cmd) | + | |
- | * Проверяем | + | |
< | < | ||
- | C: | + | mingw32-make |
- | </ | + | mingw32-make |
- | Видим следующее: | + | |
- | < | + | |
- | C: | + | |
- | QMake version 2.01a | + | |
- | Using Qt version 4.8.6 in C: | + | |
- | </ | + | |
- | А также командой: | + | |
- | < | + | |
- | echo %QMAKESPEC% | + | |
- | </ | + | |
- | Видим ответ: | + | |
- | < | + | |
- | C:\>echo %QMAKESPEC% | + | |
- | win32-g++ | + | |
- | </ | + | |
- | * Меняем рабочую папку на **C: | + | |
- | < | + | |
- | cd C: | + | |
- | </ | + | |
- | * Выполняем команду: | + | |
- | < | + | |
- | C: | + | |
- | </ | + | |
- | * Затем выполняем команду: | + | |
- | < | + | |
- | mingw32-make | + | |
- | </ | + | |
- | Видим следующее: | + | |
- | < | + | |
- | C: | + | |
- | 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" | + | |
- | \QtCore" | + | |
- | clude\ActiveQt" | + | |
- | 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" | + | |
- | \QtCore" | + | |
- | clude\ActiveQt" | + | |
- | main.cpp | + | |
- | C: | + | |
- | LIB -DQT_HAVE_MMX -DQT_HAVE_SSE -DQT_HAVE_MMXEXT -DQT_HAVE_SSE2 -DQT_THREAD_SUPP | + | |
- | ORT -DQT_NEEDS_QMAIN -I" | + | |
- | " -I" | + | |
- | ..\..\mkspecs\win32-g++" | + | |
- | 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" | + | |
- | \QtCore" | + | |
- | clude\ActiveQt" | + | |
- | ressbook.o release\moc_addressbook.cpp | + | |
- | g++ -Wl,-s -mthreads -Wl, | + | |
- | book.o release/ | + | |
- | lqtmain -lQtGui4 -lQtCore4 | + | |
</ | </ | ||
- | Результат | + | В результате компиляции и инсталляции пакета **OpenSSL Toolkit v1.x.x** получаем скомпилированные библиотеки **libeay32.dll** и **ssleay32.dll** в папке **C: |
- | Успешная сборка тестового приложения означает, что Qt правильно установлена | + | Теперь пакет **OpenSSL Toolkit v1.x.x** готов |
Line 161: | Line 49: | ||
+ | ===== Компиляция Qt Cryptographic Architecture (QCA) ===== | ||
- | + | | |
- | + | * Скачиваем исходный код | |
- | ===== Компиляция OpenSSL Toolkit v1.0.x ===== | + | |
- | + | ||
- | __**Важно!**__ Данный алгоритм справедлив для версий OpenSSL выше v1.0.x. | + | |
- | + | ||
- | * Создаём рабочую папку **C:\build\openssl** | + | |
- | * Распаковываем | + | |
- | * Запускаем __от имени Администратора__ **Git Bash** (идёт в комплекте с **[[http://code.google.com/p/msysgit/ | + | |
< | < | ||
- | MAKE=mingw32-make PERL=perl.exe ./config --prefix=/ | + | C: |
</ | </ | ||
- | Видим | + | * Переходим |
< | < | ||
- | ........................... | + | cmake -G "MinGW Makefiles" |
- | making links in ssl... | + | |
- | mingw32-make[1]: Entering directory `c:/ | + | |
- | ssl.h => ../ | + | |
- | ssl2.h => ../ | + | |
- | ssl3.h => ../ | + | |
- | ssl23.h => ../ | + | |
- | tls1.h => ../ | + | |
- | dtls1.h => ../ | + | |
- | kssl.h => ../ | + | |
- | srtp.h => ../ | + | |
- | ssltest.c => ../ | + | |
- | mingw32-make[1]: | + | |
- | making links in engines... | + | |
- | mingw32-make[1]: Entering directory `c:/ | + | |
- | making links in engines/ | + | |
- | mingw32-make[2]: Entering directory `c:/ | + | |
- | mingw32-make[2]: Nothing to be done for `links' | + | |
- | mingw32-make[2]: | + | |
- | mingw32-make[1]: | + | |
- | making links in apps... | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | making links in test... | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | making links in tools... | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | generating dummy tests (if needed)... | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | + | ||
- | Configured for mingw. | + | |
</ | </ | ||
- | Далее выполняем команду: | + | Где " |
+ | * После успешного конфигурирования проекта запускаем сборку | ||
< | < | ||
mingw32-make | mingw32-make | ||
</ | </ | ||
- | Видим следующее: | + | * Теперь запускаем |
- | < | + | |
- | .................................. | + | |
- | mingw32-make[2]: | + | |
- | gcc -I.. -I../ | + | |
- | 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 | + | |
- | | + | |
- | mingw32-make[2]: | + | |
- | mingw32-make[2]: | + | |
- | gcc -I.. -I../ | + | |
- | 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 | + | |
- | .o jpaketest.c | + | |
- | mingw32-make[2]: | + | |
- | mingw32-make[2]: | + | |
- | gcc -I.. -I../ | + | |
- | 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 | + | |
- | | + | |
- | mingw32-make[2]: | + | |
- | mingw32-make[2]: | + | |
- | gcc -I.. -I../ | + | |
- | 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 | + | |
- | o asn1test.c | + | |
- | mingw32-make[2]: | + | |
- | mingw32-make[2]: | + | |
- | gcc -I.. -I../ | + | |
- | 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 | + | |
- | .o dummytest.c | + | |
- | mingw32-make[2]: | + | |
- | mingw32-make[2]: | + | |
- | mingw32-make[1]: | + | |
- | making all in tools... | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | mingw32-make[1]: | + | |
- | </ | + | |
- | __**Примечание**:__ Если при выполнении команды **mingw32-make** | + | |
- | < | + | |
- | build_all: build_libs build_apps build_tests build_tools | + | |
- | </ | + | |
- | и удаляем из неё | + | |
- | + | ||
- | И в завершении | + | |
< | < | ||
mingw32-make install | mingw32-make install | ||
</ | </ | ||
- | Видим процесс инсталляции: | ||
- | < | ||
- | ......................................... | ||
- | making install in engines... | ||
- | mingw32-make[1]: | ||
- | installing 4758cca | ||
- | installing aep | ||
- | installing atalla | ||
- | installing cswift | ||
- | installing gmp | ||
- | installing chil | ||
- | installing nuron | ||
- | installing sureware | ||
- | installing ubsec | ||
- | installing padlock | ||
- | installing capi | ||
- | making install in engines/ | ||
- | mingw32-make[2]: | ||
- | [ -n " | ||
- | if [ -n " | ||
- | set -e; \ | ||
- | echo installing gost; \ | ||
- | pfx=lib; \ | ||
- | if [ " | ||
- | case " | ||
- | OPENSSL_PIC -DOPENSSL_THREADS -D_MT -DDSO_WIN32 -DL_ENDIAN -DWIN32_LEAN_AND_MEAN | ||
- | | ||
- | L_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM | ||
- | -DSHA512_ASM -DMD5_ASM -DRMD160_ASM -DAES_ASM -DVPAES_ASM -DWHIRLPOOL_ASM -DGHAS | ||
- | H_ASM" in \ | ||
- | *DSO_BEOS*) sfx=" | ||
- | *DSO_DLFCN*) sfx=`expr " | ||
- | \| " | ||
- | *DSO_DL*) sfx=" | ||
- | *DSO_WIN32*) sfx=" | ||
- | *) sfx=" | ||
- | esac; \ | ||
- | cp ${pfx}gost$sfx c:/ | ||
- | new; \ | ||
- | else \ | ||
- | sfx=" | ||
- | cp cyggost.dll c:/ | ||
- | ; \ | ||
- | fi; \ | ||
- | chmod 555 c:/ | ||
- | mv -f c:/ | ||
- | ngines/ | ||
- | fi | ||
- | installing gost | ||
- | mingw32-make[2]: | ||
- | mingw32-make[1]: | ||
- | making install in apps... | ||
- | mingw32-make[1]: | ||
- | installing openssl.exe | ||
- | installing CA.sh | ||
- | installing CA.pl | ||
- | installing tsget | ||
- | mingw32-make[1]: | ||
- | making install in test... | ||
- | mingw32-make[1]: | ||
- | mingw32-make[1]: | ||
- | mingw32-make[1]: | ||
- | making install in tools... | ||
- | mingw32-make[1]: | ||
- | mingw32-make[1]: | ||
- | installing libcrypto.a | ||
- | installing libssl.a | ||
- | installing libcrypto.dll.a | ||
- | installing libeay32.dll | ||
- | installing libssl.dll.a | ||
- | installing ssleay32.dll | ||
- | mingw32-make[1]: | ||
- | mingw32-make[2]: | ||
- | mingw32-make[2]: | ||
- | mingw32-make[2]: | ||
- | mingw32-make[2]: | ||
- | mingw32-make[2]: | ||
- | mingw32-make[2]: | ||
- | mingw32-make[1]: | ||
- | OpenSSL shared libraries have been installed in: | ||
- | /c/OpenSSL | ||
- | If this directory is not in a standard system path for dynamic/ | + | * В каталоге **C:\Qt\QCA** появится полностью собранная библиотека QCA |
- | libraries, then you will have problems linking and executing | + | |
- | applications that use OpenSSL libraries UNLESS: | + | |
- | * you link with static (archive) libraries. | + | Теперь комплект |
- | paranoid about security, you should use static libraries. | + | |
- | * you use the GNU libtool code during linking | + | |
- | (http:// | + | |
- | * 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:// | + | |
- | * 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 / | + | |
- | and run ldconfig(8) on Linux systems. | + | |
- | * you define the LD_LIBRARY_PATH, | + | |
- | 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 / | ||
- | chmod 644 / | ||
- | cp libssl.pc / | ||
- | chmod 644 / | ||
- | cp openssl.pc / | ||
- | chmod 644 / | ||
- | </ | ||
- | В результате компиляции и инсталляции пакета **OpenSSL Toolkit v1.0.x** получаем скомпилированные библиотеки **libeay32.dll** и **ssleay32.dll** в папке **C: | ||
- | Теперь пакет **OpenSSL Toolkit v1.0.x** готов для линковки и сборки Psi+. Временную папку сборки **C: | ||
- | ===== Компиляция утилиты конфигурирования QConf ===== | ||
- | * Запускаем __от имени Администратора__ **Git Bash** (идёт в комплекте с **[[https:// | ||
- | * Скачиваем исходный код **[[http:// | ||
- | < | ||
- | git svn clone http:// | ||
- | </ | ||
- | Или командой: | ||
- | < | ||
- | svn export --force http:// | ||
- | </ | ||
- | Видим следующее: | ||
- | < | ||
- | psi@plus /c/build | ||
- | $ svn export --force http:// | ||
- | A qconf | ||
- | A qconf\configure | ||
- | A qconf\configure.exe | ||
- | A qconf\AUTHORS | ||
- | A qconf\TODO | ||
- | A qconf\conf | ||
- | A qconf\conf\conf4.h | ||
- | A qconf\conf\conf.pro | ||
- | A qconf\conf\conf.cpp | ||
- | A qconf\conf\conf4.pro | ||
- | A qconf\conf\conf4.cpp | ||
- | A qconf\qconf.pro | ||
- | A qconf\src | ||
- | A qconf\src\stringhelp.cpp | ||
- | A qconf\src\stringhelp.h | ||
- | A qconf\src\configexe | ||
- | A qconf\src\configexe\embed.h | ||
- | A qconf\src\configexe\configexe_stub.exe | ||
- | A qconf\src\configexe\configexe.pro | ||
- | A qconf\src\configexe\configexe.c | ||
- | A qconf\src\configexe\embed.c | ||
- | A qconf\src\qconf.cpp | ||
- | A qconf\src\qconf.qrc | ||
- | A qconf\COPYING | ||
- | A qconf\modules | ||
- | A qconf\modules\qt31.qcm | ||
- | A qconf\modules\qt41.qcm | ||
- | A qconf\qconf.qc | ||
- | A qconf\README | ||
- | A qconf\examples | ||
- | A qconf\examples\sampledeps.qc | ||
- | A qconf\examples\sample.qc | ||
- | A qconf\examples\samplelib.qc | ||
- | A qconf\examples\samplecustom.qc | ||
- | Exported revision 816. | ||
- | </ | ||
- | * Переходим в папку **C: | ||
- | < | ||
- | cd qconf/ | ||
- | </ | ||
- | * Выполняем в папке **qconf** команду: | ||
- | < | ||
- | ./ | ||
- | </ | ||
- | Видим следующее: | ||
- | < | ||
- | psi@plus / | ||
- | $ ./ | ||
- | Configuring QConf ... | ||
- | Verifying Qt 4 build environment ... ok | ||
- | Good, your configure finished. | ||
- | </ | ||
- | * Далее выполняем команду: | ||
- | < | ||
- | mingw32-make -f makefile.release | ||
- | </ | ||
- | Видим следующее: | ||
- | < | ||
- | psi@plus / | ||
- | $ 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' | ||
- | / | ||
- | / | ||
- | p.o src/ | ||
- | 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' | ||
- | / | ||
- | / | ||
- | rc/ | ||
- | c:/ | ||
- | 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' | ||
- | / | ||
- | / | ||
- | .o release/ | ||
- | g++ -Wl,-s -Wl, | ||
- | lease/ | ||
- | </ | ||
- | * Копируем из рабочей папки **C: | ||
- | Теперь утилита конфигурирования **QConf** готова для конфигурирования проекта Psi+. | ||
- | Если по каким-либо причинам не получается самостоятельно скомпилировать утилиту **QConf**, то можно воспользоваться уже готовой версией утилиты, | ||
- | __**ВАЖНО!**__ | ||
- | Далее для работы с **QConf** в папке **C:\Qt\QConf** необходимо создать файл **qconf.cmd** следующего | + | ===== Компиляция zlib ===== |
+ | |||
+ | * Скачиваем исходный код zlib-1.2.8 **[[http:// | ||
+ | * Распаковываем | ||
+ | * Запускаем __от имени Администратора__ **Git Bash** в папке **C: | ||
+ | * Выполняем команду: | ||
< | < | ||
- | @set PATH=%PATH%; | + | mingw32-make -f win32/Makefile.gcc |
- | </code> | + | |
- | и при конфигурировании проекта вызывать именно его. Например: | + | |
- | < | + | |
- | ........ | + | |
- | call qconf.cmd | + | |
- | ........ | + | |
</ | </ | ||
- | Временную папку сборки | + | В результате компиляции |
+ | Копируем из папки **C: | ||
+ | * **zlib1.dll** в папку **C: | ||
+ | * **zconf.h** и **zlib.h** в папку **C: | ||
+ | * **libz.a** и **libz.dll.a** в папку | ||
+ | После этого временную рабочую папку **C: | ||
+ | Теперь комплект **zlib** готов для конфигурирования и сборки проекта Psi+. | ||
Line 535: | Line 116: | ||
- | ===== Компиляция | + | ===== Компиляция |
- | + | * Скачиваем | |
- | * Запускаем __от имени Администратора__ **CMD** в рабочей папке **C: | + | |
- | * Скачиваем исходный код QCA из официального **[[http://quickgit.kde.org/?p=qca.git|git-репозитория]]**: | + | |
< | < | ||
- | git clone git://anongit.kde.org/qca.git | + | C:\Git\bin\git clone https://github.com/zdenop/hunspell-mingw.git |
</ | </ | ||
- | Видим | + | * Переходим |
< | < | ||
- | $ git clone git:// | + | cd hunspell-mingw |
- | Cloning into ' | + | |
- | remote: Counting objects: 14036, done. | + | |
- | remote: Compressing objects: 100% (5391/ | + | |
- | remote: Total 14036 (delta 8820), reused 13132 (delta 8167) | + | |
- | Receiving objects: 100% (14036/ | + | |
- | Resolving deltas: 100% (8820/ | + | |
- | Checking connectivity... done. | + | |
- | Checking out files: 100% (467/467), done. | + | |
</ | </ | ||
- | * Переходим в папку **C: | + | * Создаем каталог для теневой сборки и переходим в него: |
< | < | ||
- | cmake -G "MinGW Makefiles" | + | mkdir build |
+ | cd build | ||
</ | </ | ||
- | Видим следующее: | + | * Выполняем конфигурацию |
< | < | ||
- | C: | + | cmake -G "MinGW Makefiles" |
- | BUILD_TYPE=Release -DBUILD_PLUGINS=ossl; | + | </ |
- | -- Could NOT find Doxygen (missing: | + | Где |
- | -- Checking for certstore.. | + | |
- | -- Using built in certstore. | + | |
- | -- certstore path: C:/build/ | + | |
- | -- mlock(2) does not take a void * | + | |
- | CMake Warning at plugins/ | + | |
- | 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:/ | + | |
- | Binary will be installed to C:/ | + | |
- | Library will be installed to C:/ | + | |
- | Feature file will be installed to C:/ | + | |
- | Public headers will be installed to C:/ | + | |
- | Private headers will be installed to C:/ | + | |
- | Documentation will be installed to C:/ | + | |
- | Man page will be installed to C:/ | + | |
- | Pkg-config file will be installed to C:/ | + | |
- | + | ||
- | -- Configuring done | + | |
- | -- Generating done | + | |
- | -- Build files have been written to: C:/ | + | |
- | </ | + | |
- | | + | |
< | < | ||
mingw32-make | mingw32-make | ||
- | </ | ||
- | Видим процесс компиляции: | ||
- | < | ||
- | ................................ | ||
- | [ 95%] Generating ssltest.moc | ||
- | Scanning dependencies of target ssltest | ||
- | [ 95%] Building CXX object examples/ | ||
- | 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/ | ||
- | 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/ | ||
- | .cpp.obj | ||
- | [ 98%] Building CXX object examples/ | ||
- | obj | ||
- | Linking CXX executable ..\..\bin\tlssocket.exe | ||
- | [ 98%] Built target tlssocket | ||
- | Scanning dependencies of target mozcerts | ||
- | [ 99%] Building CXX object tools/ | ||
- | Linking CXX executable ..\..\bin\mozcerts.exe | ||
- | [ 99%] Built target mozcerts | ||
- | [100%] Generating main.moc | ||
- | Scanning dependencies of target qcatool | ||
- | [100%] Building CXX object tools/ | ||
- | Linking CXX executable ..\..\bin\qcatool.exe | ||
- | [100%] Built target qcatool | ||
- | </ | ||
- | * Теперь запускаем установку компонентов **QCA** в заданную при конфигурировании папку: | ||
- | < | ||
mingw32-make install | 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: | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | -- Installing: C:/ | ||
- | </ | ||
- | < | ||
- | Теперь комплект **QCA** готов для конфигурирования и сборки проекта Pi+. | + | Если сборка прошла успешно, то по адресу C:\Hunspell будет установлена библиотека |
- | Если по каким-либо причинам не получается самостоятельно скомпилировать **QCA**, то можно воспользоваться уже готовой версией, | ||
Line 684: | Line 150: | ||
+ | ===== Способ сборки Psi+ при помощи кросс-компиляции из OS Linux (рекомендовано) ===== | ||
+ | ==== Настройка и сборка окружения для кросс-компиляции MXE ==== | ||
+ | * Инструкция по скачиванию доступна на официальном сайте проекта [[https:// | ||
- | + | < | |
- | + | cd ~ | |
- | + | mkdir -p github | |
- | ===== Компиляция zlib ===== | + | cd ~/github |
- | + | git clone https://github.com/mxe/mxe.git | |
- | * Скачиваем исходный код zlib-1.2.8 **[[http:// | + | cd mxe |
- | * Распаковываем содержимое архива **zlib-1.2.8.tar.gz** во временную рабочую папку **C: | + | |
- | * Запускаем __от имени Администратора__ **Git Bash** в папке **C: | + | |
- | * Выполняем команду: | + | |
- | < | + | |
- | mingw32-make -f win32/ | + | |
- | </code> | + | |
- | Видим процесс компиляции: | + | |
- | < | + | |
- | $ 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, | + | |
- | -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 | + | |
- | | + | |
- | 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/ | + | |
- | 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 | + | |
</ | </ | ||
- | В результате компиляции наблюдаем | + | * После скачивания МХЕ в заранее созданном каталоге **~/github**, создаем |
+ | |||
+ | <code bash> | ||
+ | # This variable controls the number of compilation processes | ||
+ | # within one package (" | ||
+ | JOBS := 4 | ||
- | Копируем из папки **C: | + | # This variable controls where intermediate files are created |
- | * **zlib1.dll** в папку **C: | + | # this is necessary when compiling inside a virtualbox shared |
- | * **zconf.h** и **zlib.h** в папку **C: | + | # directory. Some commands like strip fail in there with Protocol error |
- | * **libz.a** и **libz.dll.a** в папку | + | # default is the current directory |
+ | # | ||
- | После этого временную рабочую папку **C:\build\zlib** можно удалить. | + | # This variable controls the targets that will build. |
+ | MXE_TARGETS := i686-w64-mingw32.shared x86_64-w64-mingw32.shared | ||
- | Теперь комплект **zlib** готов для конфигурирования и сборки проекта Pi+. | + | # This variable controls which plugins are in use. |
- | + | # See plugins/ | |
- | + | # override MXE_PLUGIN_DIRS += plugins/ | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | ===== Компиляция утилиты ccache ===== | + | |
- | + | ||
- | Подробную инструкцию по сборке утилиты **ccache** можно найти **[[ru: | + | |
+ | # This variable controls the download mirror for SourceForge, | ||
+ | # when it is used. Enabling the value below means auto. | ||
+ | # | ||
+ | # The three lines below makes `make` build these "local | ||
+ | # packages" | ||
+ | LOCAL_PKG_LIST := qtbase qtmultimedia qtimageformats qttools qtwebkit qtwinextras qtkeychain \ | ||
+ | qttranslations hunspell libotr tidy-html5 minizip \ | ||
+ | gstreamer gst-plugins-base gst-plugins-good gst-plugins-bad opus | ||
+ | .DEFAULT_GOAL | ||
+ | local-pkg-list: | ||
+ | </ | ||
+ | __Особое внимание нужно уделить переменным: | ||
+ | - **MXE_TARGETS** где нужно указать цели сборки МХЕ, подробнее про это можно почитать в каталоге **docs** или кратко в файле **README.md**. //В примере окружение МХЕ будет компилироваться для 2х целей: i686-w64-mingw32.shared - 32х битная среда, динамические бибилиотеки (*.dll) на выходе; | ||
+ | - **MXE_TMP** - каталог где будет происходить сборка окружения MXE, если у вас много оперативной памяти (> | ||
+ | - **LOCAL_PKG_LIST** - список пакетов, | ||
+ | - **JOBS** - количество потоков сборки, | ||
+ | - **override MXE_PLUGIN_DIR** - в примере эта строка закомментирована. Таким образом можно указать версию компилятора или указать какой-то специфический набор опций (обязательно загляните в каталог plugins). //В примере указан gcc9 как компилятор, | ||
+ | | ||
- | ===== Сборка Psi+ в автоматическом режиме | + | * Закончив с настройкой окружения, запускаем его сборку командой: |
- | * Скачиваем скрипт **[[https:// | ||
- | * Включаем необходимый для сборки параметр **MakeClassic** в положение **1** (если он ещё не включен): | ||
< | < | ||
- | SET MakeClassic=1 | + | make |
- | 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: | ||
- | Если скрипт | + | Подробнее об опциях сборки пакетов |
+ | **ВНИМАНИЕ** Сборка указанных в примере пакетов для 2х целей будет длиться приблизительно 6 часов, в зависимости от мощности вашего сборочного компьютера. | ||
+ | **СОВЕТ 1** Делайте резервные копии каталога mxe/usr перед каждым обновлением сборочного окружения, | ||
+ | * После окончания сборки окружения МХЕ можно приступать к сборке Psi+ | ||
+ | ==== Сборка Psi+ в окружении MXE ==== | ||
+ | * Создаем общий каталог сборки и скачиваем исходные коды программы Psi+ при помощи утилиты **git** | ||
+ | <code bash> | ||
+ | mkdir -p ~/ | ||
+ | cd ~/github | ||
+ | git clone https:// | ||
+ | </ | ||
+ | * Настраиваем окружение для сборки | ||
+ | <code bash> | ||
+ | unset `env | \ | ||
+ | grep -vi ' | ||
+ | grep -vi ' | ||
+ | cut -d ' | ||
+ | export PATH=~/ | ||
+ | </ | ||
+ | * Запускаем симейк к исполнению для конкретной цели, например: | ||
+ | <code bash> | ||
+ | cd ~/ | ||
+ | i686-w64-mingw32.shared-cmake -DDEV_MODE=ON -DBUNDLED_IRIS_ALL=ON -DENABLE_PLUGINS=ON -DBUILD_PSIMEDIA=ON -DCHAT_TYPE=webkit ../ | ||
+ | </ | ||
+ | тут вместо **i686-w64-mingw32.shared-cmake** нужно указывать конкретный симейк для конкретной цели. Для варианта из примера это может быть также **x86_64-w64-mingw32.shared-cmake**. | ||
+ | Эта команда запустит конфигурацию Psi+ для сборки самой Psi+ чатлогом на движке QtWebkit, а также всех плагинов и плагина psimedia | ||
+ | * Запускаем команду сборки и подготовки собранных бинарных файлов к работе | ||
- | + | <code bash> | |
- | ===== Компиляция плагинов Psi+ ===== | + | i686-w64-mingw32.shared-cmake --build . --target |
- | + | ||
- | * Скачиваем скрипт **[[https:// | + | |
- | * Включаем необходимый для сборки параметр **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: | ||
- | |||
- | Если скрипт отработал успешно, | ||
- | |||
- | |||
- | |||
+ | В реультате в каталоге **~/ | ||
+ | Подробнее про флаги для сборки при помощи CMake можно почитать [[https:// | ||
Line 833: | Line 264: | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// | ||
- | * [[http:// | ||
* [[http:// | * [[http:// | ||
* [[http:// | * [[http:// |
mingw32.1403096126.txt.gz · Last modified: 2014/06/18 12:55 (external edit)