gui: Enable console line edit on setClientModel
[novacoin.git] / doc / crosscompiling_building Windows binary under Unix.txt
index 54bc8c9..7196859 100644 (file)
@@ -1,32 +1,37 @@
 \feffДанный способ должен подходить для любой Unix системы: Linux, FreeBSD, MacOS X
-При написании этого руководства использовался Linux Mint 17.1 ( http://linuxmint.com/ )
+Данное руководство писалось на Linux Mint 17.1 ( http://linuxmint.com/ ) и проверялось на Ubuntu 14.04 (https://www.ubuntu.com/)
+
 1) Подготовка системы для кросскомпиляции.
 
- sudo apt-get install git bison cmake flex g++ gperf ruby scons libghc-zlib-dev  libghc-zlib-bindings-dev
+sudo apt-get install git bison cmake flex g++ gperf ruby scons libghc-zlib-dev  libghc-zlib-bindings-dev
 
 2) Установка MXE и зависимостей
- cd /home/<ваше имя>/
- git clone https://github.com/mxe/mxe.git
+
+cd /home/<ваше имя>/
+git clone https://github.com/mxe/mxe.git
  
+sudo apt-get install autoconf automake autopoint libtool intltool libtoolize p7zip-full libgtk2.0-dev
 
 2.1) gcc
- cd /home/<ваше имя>/mxe
- make gcc zlib
+
+cd /home/<ваше имя>/mxe
+make gcc zlib libpng
 
 Проверка того, что установка gcc прошла успешно:
 В папке /home/<ваше имя>/mxe/usr/bin должен появиться файл i686-w64-mingw32.static-gcc и i686-w64-mingw32.static-g++
-И при запуске ./i686-w64-mingw32.static-gcc -v должно выдаваться
+И при запуске /home/<ваше имя>/mxe/usr/bin/i686-w64-mingw32.static-gcc -v должно выдаваться
 ......
 Thread model: win32
-gcc version 4.9.2 (GCC)
+gcc version 5.4.0 (GCC)
 
-В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должен быть файл:
+В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны быть файлы:
 libz.a
+libpng.a
 
 2.2) Openssl
  
- cd /home/<ваше имя>/mxe
- make openssl
+cd /home/<ваше имя>/mxe
+make openssl
 
 Проверка что установка Openssl прошла успешно:
 В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны появиться два файла
@@ -36,8 +41,8 @@ libz.a
 
 2.3) Boost
 
- cd /home/<ваше имя>/mxe
- make boost
+cd /home/<ваше имя>/mxe
+make boost
 
 Проверка что установка Boost прошла успешно:
 В /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib папке должны появиться файлы:
@@ -55,11 +60,15 @@ libz.a
 на
 #include <winioctl.h>
 -Сохраните файл
--Откройте терминал
- cd /home/<ваше имя>/db-6.0.20/build_unix
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- ../dist/configure --host=i686-w64-mingw32.static --enable-mingw --enable-cxx --disable-shared --disable-replication
- make
+-Откройте терминал:
+
+cd /home/<ваше имя>/db-6.0.20/dist
+chmod +x configure
+cd
+cd /home/<ваше имя>/db-6.0.20/build_unix
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+../dist/configure --host=i686-w64-mingw32.static --enable-mingw --enable-cxx --disable-shared --disable-replication
+make
 
 Проверка, что установка Berkeley DB прошла успешно:
 В папке /home/<ваше имя>/db-6.0.20/build_unix должны появиться файлы:
@@ -67,32 +76,15 @@ libdb.a
 libdb_cxx.a
 
 2.5) qrencode
--Скачайте http://download.sourceforge.net/libpng/libpng-1.6.15.tar.gz?download
--Распакуйте в домашнюю папку
--Откройте терминал
-
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- cd /home/<ваше имя>/libpng-1.6.15
- ./configure --host=i686-w64-mingw32.static --disable-shared
- make
- cp .libs/libpng16.a .libs/libpng.a
-
-Проверка что libpng собралась успешно:
-в папке /home/<ваше имя>/libpng-1.6.15/.libs должен быть файл:
-libpng.a
-
 -Скачайте http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz
 -Распакуйте в домашнюю папку
--Откройте терминал
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- cd /home/<ваше имя>/qrencode-3.4.4
-
- LIBS="../libpng-1.6.15/.libs/libpng.a ../mxe/usr/i686-w64-mingw32.static/lib/libz.a" \
- png_CFLAGS="-I../libpng-1.6.15" \
- png_LIBS="-L../libpng-1.6.15/.libs" \
- ./configure --host=i686-w64-mingw32.static --enable-static --disable-shared --without-tools
+-Откройте терминал:
 
- make
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+cd /home/<ваше имя>/qrencode-3.4.4
+chmod +x configure
+./configure --host=i686-w64-mingw32.static --enable-static --disable-shared --without-tools
+make
 
 Проверка что qrencode успешно собралась:
 в папке /home/<ваше имя>/qrencode-3.4.4/.libs должен быть файл:
@@ -101,65 +93,64 @@ libqrencode.a
 2.6 Qt 5 и Qt 4
 
 Qt 4
--Откройте терминал
+-Откройте терминал:
 
- cd /home/<ваше имя>/mxe
- make qt
+cd /home/<ваше имя>/mxe
+make qt
 
 Проверка что Qt4 собрался правильно:
--Откройте терминал
--Введите следующие команды
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- i686-w64-mingw32.static-qmake-qt4 -v
+-Откройте терминал:
+
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+i686-w64-mingw32.static-qmake-qt4 -v
 
 -Должно появиться в ответ
 QMake version 2.01a
-Using Qt version 4.8.6 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt/lib
+Using Qt version 4.8.7 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt/lib
 
 Qt 5
--Откройте терминал
+-Откройте терминал:
 
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- cd /home/<ваше имя>/mxe
- make qtbase qttools qttranslations
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+cd /home/<ваше имя>/mxe
+make qtbase qttools qttranslations
 
 Проверка что Qt5 собрался правильно:
--Откройте терминал
--Введите следующие команды
- export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
- i686-w64-mingw32.static-qmake-qt5 -v
+-Откройте терминал:
+
+export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
+i686-w64-mingw32.static-qmake-qt5 -v
 
 -Должно появиться в ответ
-QMake version 3.0
-Using Qt version 5.4.0 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt5/lib
+QMake version 3.1
+Using Qt version 5.8.0 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt5/lib
 
 3. Компиляция
 
 3.1 Скачиваем исходники
 -Перейдите в домашнюю папку
--Откройте терминал
+-Откройте терминал:
 
- git clone https://github.com/novacoin-project/novacoin.git
+git clone https://github.com/novacoin-project/novacoin.git
 
 3.2 Собираем novacoind 
--Откройте файл makefile.mingw в текстовом редакторе.(При написании инструкции использовался Pluma 1.8.1)
--Вставьте 
+-Откройте файл makefile.mingw в текстовом редакторе (например, Pluma, gedit)
+-Замените CC=gcc на 
 CC=$(CROSS)gcc
 CXX=$(CROSS)g++
+
 -Добавьте  строчку USE_ASM:=1
 -Поменяйте текущие INCLUDEPATHS, LIBPATHS, LIBS на:
 
 BOOST_SUFFIX?=-mt
+BOOST_THREAD_LIB_SUFFIX?=_win32-mt
 
 INCLUDEPATHS= \
  -I"$(CURDIR)" \
- -I"/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/include" \
- -I"/home/<ваше имя>/" \
  -I"/home/<ваше имя>/db-6.0.20/build_unix" \
  
 LIBPATHS= \
  -L"$(CURDIR)/leveldb" \
- -L"/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib" \
  -L"/home/<ваше имя>/db-6.0.20/build_unix" \
 
 LIBS= \
@@ -168,14 +159,13 @@ LIBS= \
   -l boost_system$(BOOST_SUFFIX) \
   -l boost_filesystem$(BOOST_SUFFIX) \
   -l boost_program_options$(BOOST_SUFFIX) \
-  -l boost_thread$(BOOST_SUFFIX) \
+  -l boost_thread$(BOOST_THREAD_LIB_SUFFIX) \
   -l boost_chrono$(BOOST_SUFFIX) \
   -l db_cxx \
   -l ssl \
   -l crypto \
-  -l z
--Поменяйте LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat на 
-LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static
+  -l z \
+  -l pthread
 
 -Поменяйте в последних строчках makefile.mingw
 g++ -c $(CFLAGS) -o $@ $<
@@ -199,41 +189,47 @@ CXX=$(CROSS)g++
 Сохраните файл
 
 Снова возвращаемся в файл makefile.mingw, измените 
-cd leveldb; make; cd ..
+cd leveldb;TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a; cd ..
 на 
 cd leveldb; TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a; cd ..
 
-Ещё измените
-obj/txdb-leveldb.o: leveldb/libleveldb.lib
+Если вы хотите использовать BerkeleyDB как базу блоков, то просто удалите строчку USE_LEVELDB:=1
+
+Измените
+clean:
+       -del /Q novacoind.exe
+       -del /Q obj\*
+       -del /Q crypto\scrypt\asm\obj\*
+
 на
-obj/txdb-leveldb.o: leveldb/libleveldb.a
 
-Если вы хотите использовать BerkeleyDB как базу блоков, то просто удалите строчку USE_LEVELDB:=1
+clean:
+       -rm novacoind.exe
+       -rm obj/*
+       -rm crypto/scrypt/asm/obj/*
 
 -Сохраните измененный файл makefile.mingw
 
--Откройте терминал
+-Откройте терминал:
+
 cd /home/<ваше имя>/novacoin/src
 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
-make CROSS=i686-w64-mingw32.static- -f makefile.mingw
+make -j n CROSS=i686-w64-mingw32.static- -f makefile.mingw (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
 strip novacoind.exe
 
-
-Во время линковки будут выдаваться подобные сообщения:
-libboost_thread_win32-mt.a(thread.o): duplicate section `.rdata$_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE[__ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE]' has different size
-Игнорируйте их. На работоспособность программы это никак не влияет
-
+Если всё сделано правильно, то файл novacoind.exe будет находится в папке /home/<ваше имя>/novacoin/src.
 
 3.3 Собираем Novacoin QT
 
 Внимание: Если вы хотите собирать Novacoin Qt с LevelDB, но пропустили шаг со сборкой novacoind.exe, то 
 -Измените Makefile в папке leveldb также как в пункте 3.2
--Откройте терминал и выполните следующие команды:
+-Откройте терминал:
+
 export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH
 cd /home/<ваше имя>/novacoin/src/leveldb
-TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a;
+TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmemenv.a
 
--Откройте файл /home/<ваше имя>/novacoin/novacoin-qt.pro в текстовом редакторе(при написании инструкции использовался Pluma 1.8.1)
+-Откройте файл /home/<ваше имя>/novacoin/novacoin-qt.pro в текстовом редакторе (например, Pluma, gedit)
 -Ниже 
 # Dependency library locations can be customized with:
 #    BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH,
@@ -241,12 +237,9 @@ TARGET_OS=NATIVE_WINDOWS make CROSS=i686-w64-mingw32.static- libleveldb.a libmem
 замените прописанные пути к зависимостям на
 
 BOOST_LIB_SUFFIX=-mt
-BOOST_INCLUDE_PATH=/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/include
-BOOST_LIB_PATH=/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib
+BOOST_THREAD_LIB_SUFFIX=_win32-mt
 BDB_INCLUDE_PATH=/home/<ваше имя>/db-6.0.20/build_unix
-BDB_LIB_PATH=//home/<ваше имя>/db-6.0.20/build_unix
-OPENSSL_INCLUDE_PATH=/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/include
-OPENSSL_LIB_PATH=/home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib
+BDB_LIB_PATH=/home/<ваше имя>/db-6.0.20/build_unix
 QRENCODE_INCLUDE_PATH=/home/<ваше имя>/qrencode-3.4.4
 QRENCODE_LIB_PATH=/home/<ваше имя>/qrencode-3.4.4/.libs
 
@@ -262,7 +255,7 @@ LIBS += -lshlwapi
 Если в файле нет такой строчки CONFIG += static , то добавьте её.
 
 Измените 
-win32:QMAKE_LFLAGS........................
+win32:QMAKE_LFLAGS *= -Wl,--dynamicbase -Wl,--nxcompat
 на 
 win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static 
 
@@ -271,18 +264,8 @@ win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]\\lrelease.exe
 на
 win32:QMAKE_LRELEASE = $$[QT_INSTALL_BINS]/lrelease
 
-Измените
-LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread$$BOOST_THREAD_LIB_SUFFIX
-на
-LIBS += -lboost_system$$BOOST_LIB_SUFFIX -lboost_filesystem$$BOOST_LIB_SUFFIX -lboost_program_options$$BOOST_LIB_SUFFIX -lboost_thread_win32$$BOOST_THREAD_LIB_SUFFIX
-
-Измените
-windows:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX -Wl,-Bstatic -lpthread -Wl,-Bdynamic
-на
-windows:LIBS += -lboost_chrono$$BOOST_LIB_SUFFIX
-
 -Сохраните измененный файл novacoin-qt.pro
--Откройте терминал и выполните следующие команды
+-Откройте терминал и выполните следующие команды:
 
 Qt4 + транзакционный индекс LevelDB
 
@@ -312,11 +295,7 @@ cd /home/<ваше имя>/novacoin
 i686-w64-mingw32.static-qmake-qt5 "USE_IPV6=1" "USE_ASM=1" novacoin-qt.pro
 make -j n -f Makefile.Release  (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку)
 
-
-Если всё сделано правильно, то файл novacoin-qt.exe будет находится в папке /home/<ваше имя>/novacoin/release
-Во время линковки будут выдаваться подобные сообщения:
-libboost_thread_win32-mt.a(thread.o): duplicate section `.rdata$_ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE[__ZTVN5boost16exception_detail10clone_implINS0_19error_info_injectorINS_9gregorian9bad_monthEEEEE]' has different size
-Игнорируйте их. На работоспособность программы это никак не влияет 
+Если всё сделано правильно, то файл novacoin-qt.exe будет находится в папке /home/<ваше имя>/novacoin/release.
 
 Если вы хотите уменьшить размер бинарных файлов, то
 1) Перейдите на сайт http://upx.sourceforge.net/#downloadupx