Author

Topic: Сборка bitcoin-0.10.0 в MSVC (Read 3171 times)

dmd
member
Activity: 77
Merit: 10
March 12, 2015, 12: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;
}
legendary
Activity: 1400
Merit: 1000
March 11, 2015, 09:50:44 PM
#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
member
Activity: 77
Merit: 10
March 11, 2015, 12: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"
legendary
Activity: 1400
Merit: 1000
March 11, 2015, 09:54:57 AM
#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
member
Activity: 77
Merit: 10
March 11, 2015, 09:13:08 AM
#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 ==========
legendary
Activity: 1400
Merit: 1000
March 11, 2015, 08:15:59 AM
#2
А зачем ты менял bitcoin_locale.qrc
Какие ошибки в winshutdownmonitor.cpp?
И какие ошибки в secp256k1?

Вчера нашёл время и у меня получилось собрать не меняя bitcoin_locale.qrc и winshutdownmonitor.cpp. В secp256k1 тоже ошибок не было.
Через пару дней залью свою версию на гитхаб и буду стараться обновлять...
dmd
member
Activity: 77
Merit: 10
March 11, 2015, 06:36:21 AM
#1
За исключением зависимости secp256k1 всё собралось. Рабочую либу secp256k1.lib для MSVC2013 нашёл в недрах NuGet-а, т.е. кто-то её всё-таки умеет собирать, но у меня ни как не получилось. Было б классно, если б кто-то из местных гуру помог её скомпилировать.

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

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

src\leveldb\db\db_iter.cc
Code:
+ #include 

src\qt\winshutdownmonitor.h
Code:
- #include  // 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:

    
        locale/bitcoin_en.qm
        locale/bitcoin_ru.qm
    




С 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.

Jump to: