Windows MinGW building guide
[novacoin.git] / doc / building novacoind and novacoinqt under Windows with MinGW.txt
1 \feff1. Подготовка системы.
2
3 1.1 Установка архиватора 7z: http://www.7-zip.org/ 
4 (при написании инструкции использовался 7-Zip 9.20 64 bit X64, но скорее всего подойдёт любая версия)
5
6 1.2 Установка msys shell:
7 -Скачайте http://sourceforge.net/projects/mingw/files/Installer/mingw-get-setup.exe/download
8 -нажмите Install
9 -директория для установки C:\MinGW
10 -поставить галочку напротив "...also install support for the graphical user interface."
11 -убрать галочки напротив "..in the start menu, and/or .." "... on the desktop"
12 -нажмите continue
13 -нажмите continue
14 -нажмите All Packages, затем MSYS
15 -поставте галочки напротив:
16 msys-autoconf-bin
17 msys-automake-bin
18 msys-base-bin
19 msys-libtool-bin
20 -нажмите Installation, Apply Changes, Apply. После завершения установки нажмите Close и закройте MinGW Installation Manager.
21
22 1.3 Установка MinGW-builds project toolchain:
23 Скачайте http://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/4.9.1/threads-posix/dwarf/i686-4.9.1-release-posix-dwarf-rt_v3-rev1.7z/download
24 и распакуйте на C:\
25
26 1.4 Добавте в переменную PATH путь C:\mingw32\bin;
27 Подробное описание как это сделать на Windows 8, Windows 7, Windows XP и Windows Vista
28 https://www.java.com/ru/download/help/path.xml
29 (только не нужно выполнять последний пункт из этой инструкции "Откройте заново окно командной строки и выполните код java." )
30
31 Проверка что вы всё сделали правильно:
32 1)C:\MinGW\bin должен содержать только файл mingw-get.exe
33 2)Откройте Командную строку (Нажмите кнопку Windows + R одновременно. Откроется окно "Выполнить", в поле открыть наберите cmd. Нажмите Ok). Наберите gcc -v. В командной строке выведется текст. В конце текста должно быть написано:
34 Thread model: posix
35 gcc version 4.9.1 (i686-posix-dwarf-rev1, Built by MinGW-W64 project)
36
37 2. Построение зависимостей.
38 В инструкции все зависимости сохраняются в папку c:\deps
39
40 2.1 OpenSSL 
41 -Скачайте http://www.openssl.org/source/openssl-1.0.1j.tar.gz
42 -Перейдите в папку C:\MinGW\msys\1.0 и запустите msys.bat
43 Из MinGw shell выполните следующий код:
44
45 cd /c/deps/
46 tar xvfz openssl-1.0.1j.tar.gz
47 cd openssl-1.0.1j
48 Configure no-shared no-dso mingw
49 make
50
51 2.2 Berkeley DB
52 -Скачайте http://download.oracle.com/berkeley-db/db-6.0.20.tar.gz
53 -Из MinGw shell выполните следующий код:
54
55 cd /c/deps/
56 tar xvfz db-6.0.20.tar.gz
57 cd db-6.0.20/build_unix
58 ../dist/configure --enable-mingw --enable-cxx --disable-shared --disable-replication
59 make
60
61 2.3 Boost
62 -Скачайте http://sourceforge.net/projects/boost/files/boost/1.55.0/boost_1_55_0.7z/download
63 -Распакуйте boost_1_55_0.7z в папку C:\deps
64 -Откройте командную строку Windows, и выполните следующий код:
65
66 cd C:\deps\boost_1_55_0\
67 bootstrap.bat mingw
68 b2 --build-type=complete --with-chrono --with-filesystem --with-program_options --with-system --with-thread toolset=gcc variant=release link=static threading=multi runtime-link=static stage
69
70 2.4 Miniupnpc
71 -Скачайте http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.8.20131209.tar.gz
72 -Распакуйте miniupnpc-1.8.20131209.tar.gz с помощью 7z. (Распаковать нужно 2 раза, нажмите на файле miniupnpc-1.8.20131209.tar.gz левой кнопкой мыши и выберите 7-Zip, затем Распаковать здесь. Появится файл miniupnpc-1.8.20131209.tar. С ним аналогично, левая кнопка мыши -> 7-Zip -> Распаковать здесь. Появится папка miniupnpc-1.8.20131209. Переименуйте её в miniupnpc.
73 -Откройте командную строку Windows, и выполните следующий код:
74
75 cd C:\deps\miniupnpc
76 mingw32-make -f Makefile.mingw init upnpc-static
77
78 2.5 qrencode
79 -Скачайте http://prdownloads.sourceforge.net/libpng/libpng-1.6.12.tar.gz?download
80 -Распакуйте
81 -Откройте MinGw shell (C:\MinGW\msys\1.0\msys.bat) и выполните следующий код:
82
83 cd /c/deps/libpng-1.6.12
84 configure --disable-shared
85 make
86 cp .libs/libpng16.a .libs/libpng.a
87
88 -Скачайте http://fukuchi.org/works/qrencode/qrencode-3.4.4.tar.gz
89 -Распакуйте
90 -Выполните следующий код в MinGW shell:
91
92 cd /c/deps/qrencode-3.4.4
93
94 LIBS="../libpng-1.6.12/.libs/libpng.a ../../mingw32/i686-w64-mingw32/lib/libz.a" \
95 png_CFLAGS="-I../libpng-1.6.12" \
96 png_LIBS="-L../libpng-1.6.12/.libs" \
97 configure --enable-static --disable-shared --without-tools
98
99 make
100
101 2.6 Qt 5 и Qt 4
102 Библиотеки Qt будем хранить в папке C:\Qt
103
104 Qt 5:
105 -Скачайте http://download.qt-project.org/official_releases/qt/5.3/5.3.2/submodules/qtbase-opensource-src-5.3.2.7z
106 http://download.qt-project.org/official_releases/qt/5.3/5.3.2/submodules/qttools-opensource-src-5.3.2.7z
107 -Распакуйте в C:\Qt
108 -Переименуйте папку qtbase-opensource-src-5.3.2 в 5.3.2
109 -Откройте командную строку Windows и выполните следующий код:
110
111 set INCLUDE=C:\deps\libpng-1.6.12;C:\deps\openssl-1.0.1j\include
112 set LIB=C:\deps\libpng-1.6.12\.libs;C:\deps\openssl-1.0.1j
113
114 cd C:\Qt\5.3.2
115
116 configure.bat -release -opensource -confirm-license -static -make libs -no-sql-sqlite -no-opengl -system-zlib -qt-pcre -no-icu -no-gif -system-libpng -no-libjpeg -no-freetype -no-angle -no-vcproj -openssl -no-dbus -no-audio-backend -no-wmf-backend -no-qml-debug
117
118 mingw32-make
119
120 set PATH=%PATH%;C:\Qt\5.3.2\bin
121
122 cd C:\Qt\qttools-opensource-src-5.3.2
123 qmake qttools.pro
124 mingw32-make
125
126
127
128 Qt4:
129 -Скачайте http://download.qt-project.org/official_releases/qt/4.8/4.8.6/qt-everywhere-opensource-src-4.8.6.zip
130 -Распакуйте в C:\Qt
131 -Переименуйте папку qt-everywhere-opensource-src-4.8.6 в 4.8.6
132 -Откройте командную строку Windows и выполните следующий код:
133
134 cd C:\Qt\4.8.6
135
136 configure -release -opensource -confirm-license -static -no-sql-sqlite -no-qt3support -no-opengl -qt-zlib -no-gif -qt-libpng -qt-libmng -no-libtiff -qt-libjpeg -no-dsp -no-vcproj -no-openssl -no-dbus -no-phonon -no-phonon-backend -no-multimedia -no-audio-backend -no-webkit -no-script -no-scripttools -no-declarative -no-declarative-debug -qt-style-windows -qt-style-windowsxp -qt-style-windowsvista -no-style-plastique -no-style-cleanlooks -no-style-motif -no-style-cde -nomake demos -nomake examples
137
138 mingw32-make
139
140
141 3. Компиляция
142 Будем хранить исходники в папке C:\MyProjects
143
144 3.1 Скачиваем исходники
145 -Зайдите на сайт https://github.com/novacoin-project/novacoin 
146 -Нажмите Download ZIP
147 -Распакуйте novacoin-master.zip в C:\MyProjects
148
149 3.2 Собираем novacoind 
150 -Перейдите в папку C:\MyProjects\novacoin-master\src
151 -Откройте файл makefile.mingw в текстовом редакторе.(При написании инструкции использовался WordPad)
152 -Поменяйте USE_UPNP:=0 на USE_UPNP:=1
153 -Поменяйте текущие INCLUDEPATHS, LIBPATHS, LIBS на:
154
155 BOOST_SUFFIX?=-mgw49-mt-s-1_55
156
157 INCLUDEPATHS= \
158  -I"$(CURDIR)" \
159  -I"$(CURDIR)/zerocoin" \
160  -I"/c/deps/boost_1_55_0" \
161  -I"/c/deps" \
162  -I"/c/deps/db-6.0.20/build_unix" \
163  -I"/c/deps/openssl-1.0.1j/include"
164  
165 LIBPATHS= \
166  -L"$(CURDIR)/leveldb" \
167  -L"/c/deps/boost_1_55_0/stage/lib" \
168  -L"/c/deps/miniupnpc" \
169  -L"/c/deps/db-6.0.20/build_unix" \
170  -L"/c/deps/openssl-1.0.1j"
171
172 LIBS= \
173   -l leveldb \
174   -l memenv \
175   -l boost_system$(BOOST_SUFFIX) \
176   -l boost_filesystem$(BOOST_SUFFIX) \
177   -l boost_program_options$(BOOST_SUFFIX) \
178   -l boost_thread$(BOOST_SUFFIX) \
179   -l boost_chrono$(BOOST_SUFFIX) \
180   -l db_cxx \
181   -l ssl \
182   -l crypto
183
184 -Поменяйте LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat на 
185 LDFLAGS=-Wl,--dynamicbase -Wl,--nxcompat -Wl,--large-address-aware -static
186
187 -Если вы хотите использовать LevelDB как базу блоков то добавте в файл MinGW:
188 USE_LEVELDB:=1
189 (ниже USE_IPV6:=1)
190 Так же измените 
191 cd leveldb; make; cd ..
192 на 
193 cd leveldb; TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a; cd ..
194
195 Ещё измените
196 obj/txdb-leveldb.o: leveldb/libleveldb.lib
197 на
198 obj/txdb-leveldb.o: leveldb/libleveldb.a
199
200 Если вы хотите использовать LevelDB как базу блоков, то просто удалите строчку USE_LEVELDB:=1
201
202 -Сохраните измененный файл makefile.mingw
203
204 -Откройте MinGW shell (C:\MinGW\msys\1.0\msys.bat) и выполните следующий код:
205
206 cd /c/MyProjects/novacoin-master/src
207 make -f makefile.mingw
208 strip novacoind.exe
209
210 (Возможная ошибка:
211 Fatal error: can't create obj/zerocoin/Accumulator.o: No such file or directory
212 make: *** [obj/zerocoin/Accumulator.o] Error 1
213 Она происходит если нет папки C:\MyProjects\novacoin-master\src\obj\zerocoin . Так что при удалении obj файлов следите, чтобы папка C:\MyProjects\novacoin-master\src\obj\zerocoin не удалилась вместе с obj файлами.)
214
215 Если всё сделано правильно, то файл novacoind.exe будет находится в папке C:\MyProjects\novacoin-master\src 
216
217
218 3.3 Собираем Novacoin QT
219
220 Внимание: Если вы хотите собирать Novacoin Qt с LevelDB, но пропустили шаг со сборкой novacoind.exe, то 
221 -Откройте MinGW shell (C:\MinGW\msys\1.0\msys.bat) и выполните следующий код:
222
223 cd /c/myprojects/novacoin-master/src/leveldb
224 TARGET_OS=NATIVE_WINDOWS make libleveldb.a libmemenv.a
225
226 -Откройте файл C:\MyProjects\novacoin-master\novacoin-qt.pro в текстовом редакторе(при написании инструкции использовался WordPad)
227 -Ниже 
228 # Dependency library locations can be customized with:
229 #    BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH,
230 #    BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively
231 замените прописанные пути к зависимостям на
232
233 BOOST_LIB_SUFFIX=-mgw49-mt-s-1_55
234 BOOST_INCLUDE_PATH=C:/deps/boost_1_55_0
235 BOOST_LIB_PATH=C:/deps/boost_1_55_0/stage/lib
236 BDB_INCLUDE_PATH=C:/deps/db-6.0.20/build_unix
237 BDB_LIB_PATH=C:/deps/db-6.0.20/build_unix
238 OPENSSL_INCLUDE_PATH=C:/deps/openssl-1.0.1j/include
239 OPENSSL_LIB_PATH=C:/deps/openssl-1.0.1j
240 MINIUPNPC_INCLUDE_PATH=C:/deps/
241 MINIUPNPC_LIB_PATH=C:/deps/miniupnpc
242 QRENCODE_INCLUDE_PATH=C:/deps/qrencode-3.4.4
243 QRENCODE_LIB_PATH=C:/deps/qrencode-3.4.4/.libs
244
245 Так же измените(если ещё не изменено) 
246 LIBS += -lshlwapi
247 genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
248
249 на
250  
251 LIBS += -lshlwapi
252 #genleveldb.commands = cd $$PWD/src/leveldb && CC=$$QMAKE_CC CXX=$$QMAKE_CXX TARGET_OS=OS_WINDOWS_CROSSCOMPILE $(MAKE) OPT=\"$$QMAKE_CXXFLAGS $$QMAKE_CXXFLAGS_RELEASE\" libleveldb.a libmemenv.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libleveldb.a && $$QMAKE_RANLIB $$PWD/src/leveldb/libmemenv.a
253
254 Если в файле нет такой строчки CONFIG += static , то добавте её.
255
256 Измените 
257 win32:QMAKE_LFLAGS........................
258 на 
259 win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static 
260
261 -Сохраните измененный файл novacoin-qt.pro
262 -Откройте командную строку Windows и выполните следующий код:
263
264 Qt5 + база блоков BDB 
265
266 set PATH=%PATH%;C:\Qt\5.3.2\bin
267 cd C:\MyProjects\novacoin-master
268 qmake "USE_QRCODE=1" "USE_UPNP=1" "USE_IPV6=1" novacoin-qt.pro
269 mingw32-make -f Makefile.Release
270
271
272 Qt5 + база блоков LevelDB
273
274 set PATH=%PATH%;C:\Qt\5.3.2\bin
275 cd C:\MyProjects\novacoin-master
276 qmake "USE_QRCODE=1" "USE_UPNP=1" "USE_IPV6=1" "USE_LEVELDB=1" novacoin-qt.pro
277 mingw32-make -f Makefile.Release
278
279 Qt4 + база блоков BDB
280
281 set PATH=%PATH%;C:\Qt\4.8.6\bin
282 cd C:\MyProjects\novacoin-master
283 qmake "USE_QRCODE=1" "USE_UPNP=1" "USE_IPV6=1" novacoin-qt.pro
284 mingw32-make -f Makefile.Release
285
286 Qt4 + база блоков LevelDB
287
288 set PATH=%PATH%;C:\Qt\4.8.6\bin
289 cd C:\MyProjects\novacoin-master
290 qmake "USE_QRCODE=1" "USE_UPNP=1" "USE_IPV6=1" "USE_LEVELDB=1" novacoin-qt.pro
291 mingw32-make -f Makefile.Release
292
293
294
295 Если всё сделано правильно, то файл novacoin-qt.exe будет находится в папке C:\MyProjects\novacoin-master\release