Bitcoin Forum
November 13, 2024, 08:08:00 PM *
News: Latest Bitcoin Core release: 28.0 [Torrent]
 
   Home   Help Search Login Register More  
Pages: [1]
  Print  
Author Topic: Сборка bitcoin-0.10.0 в MSVC  (Read 3168 times)
dmd (OP)
Member
**
Offline Offline

Activity: 77
Merit: 10


View Profile
March 11, 2015, 11:36:21 AM
Last edit: March 11, 2015, 12:15:41 PM by dmd
 #1

За исключением зависимости secp256k1 всё собралось. Рабочую либу secp256k1.lib для MSVC2013 нашёл в недрах NuGet-а, т.е. кто-то её всё-таки умеет собирать, но у меня ни как не получилось. Было б классно, если б кто-то из местных гуру помог её скомпилировать.

В оригинальных исходниках поправил следующее:

src\leveldb\db\c.cc
Code:
- #include <unistd.h>
+ #ifndef _MSC_VER
+ #include <unistd.h>
+ #endif

src\leveldb\db\db_iter.cc
Code:
+ #include <stdint.h>

src\qt\winshutdownmonitor.h
Code:
- #include <windef.h> // for HWND
-     static void registerShutdownBlockReason(const QString& strReason, const HWND& mainWinId);

src\qt\winshutdownmonitor.cpp
Code:
- void WinShutdownMonitor::registerShutdownBlockReason(const QString& strReason, const HWND& mainWinId)
- {
-     typedef BOOL (WINAPI *PSHUTDOWNBRCREATE)(HWND, LPCWSTR);
-     PSHUTDOWNBRCREATE shutdownBRCreate = (PSHUTDOWNBRCREATE)GetProcAddress(GetModuleHandleA("User32.dll"), "ShutdownBlockReasonCreate");
-     if (shutdownBRCreate == NULL) {
-         qWarning() << "registerShutdownBlockReason: GetProcAddress for ShutdownBlockReasonCreate failed";
-         return;
-     }
-
-     if (shutdownBRCreate(mainWinId, strReason.toStdWString().c_str()))
-         qWarning() << "registerShutdownBlockReason: Successfully registered: " + strReason;
-     else
-         qWarning() << "registerShutdownBlockReason: Failed to register: " + strReason;
- }

src\qt\bitcoin.cpp
Code:
-         WinShutdownMonitor::registerShutdownBlockReason(QObject::tr("Bitcoin Core didn't yet exit safely..."), (HWND)app.getMainWinId());

src\qt\bitcoin_locale.qrc
Code:
<!DOCTYPE RCC><RCC version="1.0">
    <qresource prefix="/translations">
        <file alias="en">locale/bitcoin_en.qm</file>
        <file alias="ru">locale/bitcoin_ru.qm</file>
    </qresource>
</RCC>


С winshutdownmonitor конечно радикально получилось, но как ни странно без него работает. Хотелось бы чтоб кто-нибудь помог сделать правку через условную компиляцию, как то же оно должно работать в Окнах. Ещё было бы интересно зачистить варнинги:
Code:
2>sync.obj : warning LNK4221: ▌ЄюЄ Їрщы юс·хъЄр эх юяЁхфхы хЄ ъръшх-ышсю Ёрэхх эхюяЁхфхыхээ√х юЄъЁ√Є√х ёшьтюы√, яю¤Єюьє юэ эх сєфхЄ шёяюы№чютрЄ№ё  эшъръшьш юяхЁрЎш ьш ъюьяюэютъш, юсЁр∙р■∙шьшё  ъ ¤Єющ сшсышюЄхъх

6>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): warning MSB8017: A circular dependency has been detected while executing custom build commands for item "build\bitcoin.moc". This may cause incremental build to work incorrectly.
6>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): warning MSB8017: A circular dependency has been detected while executing custom build commands for item "build\bitcoinamountfield.moc". This may cause incremental build to work incorrectly.
6>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): warning MSB8017: A circular dependency has been detected while executing custom build commands for item "build\overviewpage.moc". This may cause incremental build to work incorrectly.
6>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): warning MSB8017: A circular dependency has been detected while executing custom build commands for item "build\rpcconsole.moc". This may cause incremental build to work incorrectly.
6>C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\Microsoft.CppCommon.targets(170,5): warning MSB8017: A circular dependency has been detected while executing custom build commands for item "build\intro.moc". This may cause incremental build to work incorrectly.

6>d:\soft\cointest\btc2\src\qt\walletmodel.cpp(535): warning C4717: WalletModel::UnlockContext::CopyFrom: рекурсия на всех путях выполнения, функция вызовет переполнение стека
6>d:\soft\cointest\btc2\src\qt\walletmodel.h(174): warning C4717: WalletModel::UnlockContext::operator=: рекурсия на всех путях выполнения, функция вызовет переполнение стека

Зависимости gmp и protobuf собирал как написано в их доках, остальные как в Нове. Проверял сборку только для Release|x64.

fsb4000
Legendary
*
Offline Offline

Activity: 1400
Merit: 1000



View Profile
March 11, 2015, 01:15:59 PM
 #2

А зачем ты менял bitcoin_locale.qrc
Какие ошибки в winshutdownmonitor.cpp?
И какие ошибки в secp256k1?

Вчера нашёл время и у меня получилось собрать не меняя bitcoin_locale.qrc и winshutdownmonitor.cpp. В secp256k1 тоже ошибок не было.
Через пару дней залью свою версию на гитхаб и буду стараться обновлять...
dmd (OP)
Member
**
Offline Offline

Activity: 77
Merit: 10


View Profile
March 11, 2015, 02:13:08 PM
 #3

Из bitcoin_locale.qrc временно убрал все локали кроме en и ru, т.к. были какие-то ошибки в других локалях. Локалями можно заняться в самый последний момент, когда всё остальное заработает.


Ошибка в winshutdownmonitor.cpp:
Code:
1>------ Сборка начата: проект: bitcoin-qt, Конфигурация: Release x64 ------
1>  winshutdownmonitor.cpp
1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\winnt.h(147): fatal error C1189: #error :  "No Target Architecture"
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========


При установленных дифинах USE_NUM_GMP;USE_FIELD_GMP в secp256k1 такая ошибка:
Code:
1>------ Сборка начата: проект: secp256k1, Конфигурация: Release x64 ------
1>  secp256k1.c
1>d:\soft\cointest\bitcoin\src\secp256k1\src\field.h(108): error C2057: требуется константное выражение
1>d:\soft\cointest\bitcoin\src\secp256k1\src\field.h(108): error C2466: невозможно выделить память для массива постоянного нулевого размера
1>d:\soft\cointest\bitcoin\src\secp256k1\src\field.h(111): error C2057: требуется константное выражение
1>d:\soft\cointest\bitcoin\src\secp256k1\src\field.h(111): error C2466: невозможно выделить память для массива постоянного нулевого размера
1>d:\soft\cointest\bitcoin\src\secp256k1\src\field_impl.h(45): error C2059: синтаксическая ошибка: }
1>d:\soft\cointest\bitcoin\src\secp256k1\src\field_impl.h(217): fatal error C1189: #error :  "Please select field inverse implementation"
========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
fsb4000
Legendary
*
Offline Offline

Activity: 1400
Merit: 1000



View Profile
March 11, 2015, 02:54:57 PM
 #4

По поводу winshutdownmonitor.cpp
Добавить определение препроцессору _AMD64_ (для 64 битной сборки) и _X86_(для 32 битной сборки)

По поводу secp256k1.
Часть ошибок решается так:
Открыть свойства проекта. Выбрать С/С++ -> Дополнительно -> Компилировать как код C++(/TP)
Вторая часть ошибок решается изменением описания функций(убиранием конкретного размера у массивов). Примерно так:
Code:
#ifndef _MSC_VER
static void secp256k1_fe_inv_all_var(size_t len, secp256k1_fe_t r[len], const secp256k1_fe_t a[len]);
#else
static void secp256k1_fe_inv_all_var(size_t len, secp256k1_fe_t r[], const secp256k1_fe_t a[]);
#endif
dmd (OP)
Member
**
Offline Offline

Activity: 77
Merit: 10


View Profile
March 11, 2015, 05:15:00 PM
 #5

А с этим как быть?
Code:
1>d:\soft\cointest\bitcoin\src\secp256k1\src\group_impl.h(93): error C2466: невозможно выделить память для массива постоянного нулевого размера
1>d:\soft\cointest\bitcoin\src\secp256k1\src\group_impl.h(93): error C2133: az: неизвестный размер
1>d:\soft\cointest\bitcoin\src\secp256k1\src\group_impl.h(106): error C2133: azi: неизвестный размер
1>d:\soft\cointest\bitcoin\src\secp256k1\src\ecmult_impl.h(49): error C2133: prej: неизвестный размер
1>d:\soft\cointest\bitcoin\src\secp256k1\src\ecmult_gen_impl.h(46): error C2117: nums_b32: переполнение границ массива
1>          d:\soft\cointest\bitcoin\src\secp256k1\src\ecmult_gen_impl.h(46): см. объявление "nums_b32"
fsb4000
Legendary
*
Offline Offline

Activity: 1400
Merit: 1000



View Profile
March 12, 2015, 02:50:44 AM
 #6

Точно так же как я и говорил выше:
Code:
#ifndef _MSC_VER
static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge_t r[len], const secp256k1_gej_t a[len]) {
#else
static void secp256k1_ge_set_all_gej_var(size_t len, secp256k1_ge_t r[], const secp256k1_gej_t a[]) {
#endif
Добавить явное преобразование
Code:
secp256k1_fe_t *azi = (secp256k1_fe_t *)checked_malloc(sizeof(secp256k1_fe_t) * count);
И изменить размер массива на 33 элемента
Code:
static const unsigned char nums_b32[33] = "The scalar for this x is unknown";
dmd (OP)
Member
**
Offline Offline

Activity: 77
Merit: 10


View Profile
March 12, 2015, 05:47:27 AM
 #7

checked_malloc это оно?:

Code:
void * checked_malloc(size_t len)
{
    void * k;
    k = malloc(sizeof(len));       
    if (!k){
        perror("checked_malloc");
        exit(1);
    }
    return k;
}
fsb4000
Legendary
*
Offline Offline

Activity: 1400
Merit: 1000



View Profile
March 12, 2015, 09:24:09 AM
 #8

https://github.com/fsb4000/bitcoin/commit/d47c69c106eaf4e7d580c2d93051a89b9cc5658c
Pages: [1]
  Print  
 
Jump to:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.19 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!