X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=doc%2Fcrosscompiling_building%20Windows%20binary%20under%20Unix.txt;h=71968597b6b44149e5e8a79d6946980e7c5f61d6;hb=HEAD;hp=7a487361b5d78f1794a04e4f1852b06ba56cb6ab;hpb=acd906f9bbf55e42e4facfc8a7b2793d1f071efe;p=novacoin.git diff --git a/doc/crosscompiling_building Windows binary under Unix.txt b/doc/crosscompiling_building Windows binary under Unix.txt deleted file mode 100644 index 7a48736..0000000 --- a/doc/crosscompiling_building Windows binary under Unix.txt +++ /dev/null @@ -1,386 +0,0 @@ -Данный способ должен подходить для любой Unix системы: Linux, FreeBSD, MacOS X -При написании этого руководства использовался Linux Mint 17.1 ( http://linuxmint.com/ ) -1) Подготовка системы для кросскомпиляции. - - 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 - - -2.1) gcc - cd /home/<ваше имя>/mxe - make gcc zlib - -Проверка того, что установка gcc прошла успешно: -В папке /home/<ваше имя>/mxe/usr/bin должен появиться файл i686-w64-mingw32.static-gcc и i686-w64-mingw32.static-g++ -И при запуске ./i686-w64-mingw32.static-gcc -v должно выдаваться -...... -Thread model: win32 -gcc version 4.9.2 (GCC) - -В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должен быть файл: -libz.a - -2.2) Openssl - - cd /home/<ваше имя>/mxe - make openssl - -Проверка что установка Openssl прошла успешно: -В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib должны появиться два файла --libssl.a --libcrypto.a -В папке mxe/usr/i686-w64-mingw32.static/include должна появиться папка openssl - -2.3) Boost - - cd /home/<ваше имя>/mxe - make boost - -Проверка что установка Boost прошла успешно: -В /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/lib папке должны появиться файлы: --libboost_имябиблиотеки_mt.a (libboost_atomic-mt.a и другие подобные файлы) --libboost_имябиблиотеки_mt-d.a (libboost_atomic-mt-d.a и другие подобные файлы) - -В папке /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/include должна появиться папка boost - -2.4) Berkeley DB --Скачайте http://download.oracle.com/berkeley-db/db-6.0.20.tar.gz --Распакуйте в домашнюю папку --Откройте файл /home/<ваше имя>/db-6.0.20/src/dbinc/win_db.h --Измените -#include -на -#include --Сохраните файл --Откройте терминал - 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 должны появиться файлы: -libdb.a -libdb_cxx.a - -2.5) Miniupnpc --Скачайте http://miniupnp.free.fr/files/download.php?file=miniupnpc-1.9.20150206.tar.gz --Распакуйте в домашнюю папку --Переименуйте папку miniupnpc-1.9.20150206 в miniupnpc --Перейдите в папку miniupnpc и создайте файл miniupnpcstrings.h --Напишите в нём: - -#ifndef MINIUPNPCSTRINGS_H_INCLUDED -#define MINIUPNPCSTRINGS_H_INCLUDED - -#define OS_STRING "MSWindows/6.1.7601" -#define MINIUPNPC_VERSION_STRING "1.9" - -#if 0 -/* according to "UPnP Device Architecture 1.0" */ -#define UPNP_VERSION_STRING "UPnP/1.0" -#else -/* according to "UPnP Device Architecture 1.1" */ -#define UPNP_VERSION_STRING "UPnP/1.1" -#endif - -#endif - -и сохраните файл --Откройте файл Makefile.mingw --Измените строку 7: -измените - CC = gcc -на - CC=$(CROSS)gcc - --Удалите строки с 67 по 73 - -wingenminiupnpcstrings: wingenminiupnpcstrings.o - -wingenminiupnpcstrings.o: wingenminiupnpcstrings.c - -miniupnpcstrings.h: miniupnpcstrings.h.in wingenminiupnpcstrings - wingenminiupnpcstrings $< $@ - --Сохраните файл - --Откройте терминал - - export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH - make CROSS=i686-w64-mingw32.static- -f Makefile.mingw init upnpc-static - - -Проверка, что установка Miniupnpc прошла успешно: -В папке miniupnpc должен появиться файл libminiupnpc.a - - -2.6) 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 - -Проверка что qrencode успешно собралась: -в папке /home/<ваше имя>/qrencode-3.4.4/.libs должен быть файл: -libqrencode.a - -2.7 Qt 5 и Qt 4 - -Qt 4 --Откройте терминал - - cd /home/<ваше имя>/mxe - make qt - -Проверка что Qt4 собрался правильно: --Откройте терминал --Введите следующие команды - 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 - -Qt 5 --Откройте терминал - - 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 - --Должно появиться в ответ -QMake version 3.0 -Using Qt version 5.4.0 in /home/<ваше имя>/mxe/usr/i686-w64-mingw32.static/qt5/lib - -3. Компиляция - -3.1 Скачиваем исходники --Перейдите в домашнюю папку --Откройте терминал - - git clone https://github.com/novacoin-project/novacoin.git - -3.2 Собираем novacoind --Откройте файл makefile.mingw в текстовом редакторе.(При написании инструкции использовался Pluma 1.8.1) --Вставьте -CC=$(CROSS)gcc -CXX=$(CROSS)g++ --Поменяйте USE_UPNP:=0 на USE_UPNP:=1 --Добавьте строчку USE_ASM:=1 --Поменяйте текущие INCLUDEPATHS, LIBPATHS, LIBS на: - -BOOST_SUFFIX?=-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/<ваше имя>/miniupnpc" \ - -L"/home/<ваше имя>/db-6.0.20/build_unix" \ - -LIBS= \ - -l leveldb \ - -l memenv \ - -l boost_system$(BOOST_SUFFIX) \ - -l boost_filesystem$(BOOST_SUFFIX) \ - -l boost_program_options$(BOOST_SUFFIX) \ - -l boost_thread$(BOOST_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 - --Поменяйте в последних строчках makefile.mingw -g++ -c $(CFLAGS) -o $@ $< -на -$(CXX) -c $(CFLAGS) -o $@ $< - -g++ $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) -на -$(CXX) $(CFLAGS) $(LDFLAGS) -o $@ $(LIBPATHS) $^ $(LIBS) - --Если вы хотите использовать LevelDB как базу блоков то измените: -USE_LEVELDB:=0 -на -USE_LEVELDB:=1 -(выше USE_IPV6:=1) -Откройте файл /home/<ваше имя>/novacoin/src/leveldb/Makefile -Вставьте ниже строчки CXXFLAGS += -I. -I./include $(PLATFORM_CXXFLAGS) $(OPT) следующие строки: - -CC=$(CROSS)gcc -CXX=$(CROSS)g++ -Сохраните файл - -Снова возвращаемся в файл makefile.mingw, измените -cd leveldb; make; 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 -на -obj/txdb-leveldb.o: leveldb/libleveldb.a - -Если вы хотите использовать BerkeleyDB как базу блоков, то просто удалите строчку USE_LEVELDB:=1 - --Сохраните измененный файл makefile.mingw - --Откройте терминал -cd /home/<ваше имя>/novacoin/src -export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH -make CROSS=i686-w64-mingw32.static- -f makefile.mingw -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 -Игнорируйте их. На работоспособность программы это никак не влияет - - -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; - --Откройте файл /home/<ваше имя>/novacoin/novacoin-qt.pro в текстовом редакторе(при написании инструкции использовался Pluma 1.8.1) --Ниже -# Dependency library locations can be customized with: -# BOOST_INCLUDE_PATH, BOOST_LIB_PATH, BDB_INCLUDE_PATH, -# BDB_LIB_PATH, OPENSSL_INCLUDE_PATH and OPENSSL_LIB_PATH respectively -замените прописанные пути к зависимостям на - -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 -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 -MINIUPNPC_INCLUDE_PATH=/home/<ваше имя>/ -MINIUPNPC_LIB_PATH=/home/<ваше имя>/miniupnpc -QRENCODE_INCLUDE_PATH=/home/<ваше имя>/qrencode-3.4.4 -QRENCODE_LIB_PATH=/home/<ваше имя>/qrencode-3.4.4/.libs - -Так же измените(если ещё не изменено) -LIBS += -lshlwapi -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 - -на - -LIBS += -lshlwapi -#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 - -Если в файле нет такой строчки CONFIG += static , то добавьте её. - -Измените -win32:QMAKE_LFLAGS........................ -на -win32:QMAKE_LFLAGS *= -Wl,--large-address-aware -static - -Измените -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 - -export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH -cd /home/<ваше имя>/novacoin -i686-w64-mingw32.static-qmake-qt4 "USE_UPNP=1" "USE_IPV6=1" "USE_LEVELDB=1" "USE_ASM=1" novacoin-qt.pro -make -j n -f Makefile.Release (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку) - -Qt4 + транзакционный индекс BDB - -export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH -cd /home/<ваше имя>/novacoin -i686-w64-mingw32.static-qmake-qt4 "USE_UPNP=1" "USE_IPV6=1" "USE_ASM=1" novacoin-qt.pro -make -j n -f Makefile.Release (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку) - -Qt5 + транзакционный индекс LevelDB - -export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH -cd /home/<ваше имя>/novacoin -i686-w64-mingw32.static-qmake-qt5 "USE_UPNP=1" "USE_IPV6=1" "USE_LEVELDB=1" "USE_ASM=1" novacoin-qt.pro -make -j n -f Makefile.Release (вместо n количество ядер вашего процессора, которые вы хотите выделить под сборку) - -Qt5 + транзакционный индекс BDB - -export PATH=/home/<ваше имя>/mxe/usr/bin:$PATH -cd /home/<ваше имя>/novacoin -i686-w64-mingw32.static-qmake-qt5 "USE_UPNP=1" "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 -Игнорируйте их. На работоспособность программы это никак не влияет - -Если вы хотите уменьшить размер бинарных файлов, то -1) Перейдите на сайт http://upx.sourceforge.net/#downloadupx -2) Скачайте программу в соответсвии с вашей системой -3) Распакуйте программу в папку с бинарными Novacoin файлами. -4) Введите в терминале -./upx -9 novacoind.exe -затем -./upx -9 novacoin-qt.exe - -И ваши novacoind и novacoin-qt станут меньше ~ в 3 раза.