在win10vs上编译运行bitcoinv01源码下.docx

上传人:b****6 文档编号:7774937 上传时间:2023-01-26 格式:DOCX 页数:6 大小:85.49KB
下载 相关 举报
在win10vs上编译运行bitcoinv01源码下.docx_第1页
第1页 / 共6页
在win10vs上编译运行bitcoinv01源码下.docx_第2页
第2页 / 共6页
在win10vs上编译运行bitcoinv01源码下.docx_第3页
第3页 / 共6页
在win10vs上编译运行bitcoinv01源码下.docx_第4页
第4页 / 共6页
在win10vs上编译运行bitcoinv01源码下.docx_第5页
第5页 / 共6页
点击查看更多>>
下载资源
资源描述

在win10vs上编译运行bitcoinv01源码下.docx

《在win10vs上编译运行bitcoinv01源码下.docx》由会员分享,可在线阅读,更多相关《在win10vs上编译运行bitcoinv01源码下.docx(6页珍藏版)》请在冰豆网上搜索。

在win10vs上编译运行bitcoinv01源码下.docx

在win10vs上编译运行bitcoinv01源码下

 

在win10vs2015上编译运行bitcoinv0.1源码(下)

一篇文章详细描述的如何让bitcoinv1.0源码通过编

译,本篇将描述第一次运行过程中修改出现过的问题。

数据库dll加载出错不清楚这个问题是不是个例,bitcoin使用的数据库BerkeleyDBv4.8在oracle官网上下载安装后

1.使用release版本的lib和dll直接使用release版本的dll

在debug下运行bitcoin源码会第184行左右,在

//Clearand

ReadAtCursor函数中的free处崩溃:

freememory

memset(datKey.get_data(),0,datKey.get_size());

memset(datValue.get_data(),0,

datValue.get_size());

free(datKey.get_data());//很可能在这个地方崩溃

free(datValue.get_data());

产生的原因是:

HEAP[bitcoin-v0.1.exe]:

InvalidaddressspecifiedtoRtlValidateHeap(01640000,03177208)

呃••其实我不知道产生的原因是什么,简单的搜索可能的原因是:

在不同模块(工程)之间传递C++类,而这两个模块用了不同的运行时库(RuntimeLibrary)设置。

例如:

EXE模块调用DLL模块里传递C++类的函数,但

Debug是Multi-threadedDebug(/MTd))方式编译,而

EXE模块使用动态链接(Release是Multi-threadedDLL(/MD)、Debug是Multi-threadedDebugDLL(/MDd))方式编译。

HEAP[xxx.exe]:

InvalidAddressspecifiedto

RtlValidateHeap错误的解决方法总结>我也不清楚是不是

这个原因啦,这个问题先搁置下••-•使用2lebug版本的lib

和dll直接使用安装包中自带的那个libdb48d.lib和

libdb48d.dll是在vs2005或者是vs2008平台下构建的。

它在构建这个libdb48.dll和libdb48d.dll的时候分别依赖了

8.0.50727.762版本的libdb48.dll和libdb48d.dll。

这丫是个历史遗留问题,参考:

Side-by-sideassembly这2个dll只会在安装vs2005和vs2008的时候存在,以后都只会以兼容库的形式存在。

但是关键是这个现在绑定版本,所以就造成了crash。

解决方法就是下面的第3点,重新编译。

至于

berkeleydb

release为什么会自动存在,那是因为我在安装的时候安装包把安装的路径\bin填写到了path变量当中,而在这个\bin目录下已经提供了8.0.50727.762版本的

libdb48.dll。

但是它丫却没有在\bin\debug目录下提供

libdb48d.dll。

所以就造成了release能运行,但是因为其他原因崩溃,而debug是直接运行不起来的。

3.解决方法因为安装包中的release和debug都无法运行,所以只能自己编译出BerkeleyDB的lib和dll假设现在的

berkeleydb的根目录是那么在

\\db-4.8.30\build_windows目录下可以找到

Berkeley_DB.sln打开它向上兼容后,进行项目构建,然后将一个example项目设为主项目进行运行。

如果能运行成功就是构建成功并且能够正常运行。

此时在

\\db-4.8.30\build_windows\Win32\Debug\目录下可以发现

libdb48d.lib和libdb48d.dll这两个文件。

而这两个文件就是在自己平台上编译出来的动态链接库。

之后把bitcoin源码的关于BerkeleyDB的依赖库修改为新的路径,然后就可以正常运行了。

这里修改的路径就是

$(BDBPath)\db-4.8.30\build_windows\Win32\Debug\(参照上一篇)然后把libdb48d.dll拷贝到bitcoin项目的libs目录下。

二、wxWidgets高版本兼容问题ps:

以下的崩溃很可能是因为wxWidgets版本高的原因,要是版本低于3.0/或者

2.8?

(可能)很可能就没这些问题1.运行崩溃崩溃的原因主要是由于在wxWidgets3.0还是2.8收紧了Sizer布局的

Align规则检查的严格性。

当布局的flag出现:

wxEXPAND|wxALIGN_CENTER_XXX

//或者是

//当Sizer设置成Verical而子元素在Add进入Sizer

的时候设置为

wxALIGN_CENTER_VERICAL//horizontal同理

所以出现问题的地方为:

文件uibase.cpp//133L//bSizer3->Add(m_panel14,1,wxEXPAND|wxALIGN_BOTTOM|wxALL,5);

//修改为

bSizer3->Add(m_panel14,1,wxEXPAND|wxALL,5);

//357L//bSizer57->Add(m_staticText32,0,wxALIGN_CENTER_VERTICAL|wxALL,5);

//修改为

bSizer57->Add(m_staticText32,0,wxALL,5);

//363L//bSizer56->Add(m_staticText31,0,wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxL

EFT,5);

//修改为

bSizer56->Add(m_staticText31,0,wxTOP|wxBOTTOM|

wxLEFT,5);

//366L//bSizer56->Add(m_textCtrlTransactionFee,0,wxALL|wxALIGN_CENTER_VERTICAL,5);

//修改为

bSizer56->Add(m_textCtrlTransactionFee,0,wxALL,5);

//461L//bSizer60->Add(bSizer61,0,wxALIGN_RIGHT|wxEXPAND,5);

//修改为bSizer60->Add(bSizer61,0,wxEXPAND,5);

//1751L//bSizer81->Add(m_textCtrl1,0,wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL,5);

//修改为

bSizer81->Add(m_textCtrl1,0,wxALL|wxEXPAND,5);

//bSizer81->Add(m_textCtrl2,0,wxALL|wxEXPAND|wxALIGN_CENTER_HORIZONTAL,5);

//修改为

bSizer81->Add(m_textCtrl2,0,wxALL|wxEXPAND,5);

同时,在该文件中有其他瑕疵点:

//463L//this->SetSizer(bSizer60);

//修改为

this->SetSizerAndFit(bSizer60);

//604L//this->SetSizer(bSizer21);

//修改为

this->SetSizerAndFit(bSizer21);

//1786L//this->SetSizer(bSizer79);

//修改为

this->SetSizerAndFit(bSizer79);

//fgSizer1=newwxFlexGridSizer(3,2,0,0);

//注:

这里很

//修改为

fgSizer1=newwxFlexGridSizer(4,2,0,0);

所以这里改成4行2列在uibase.h中修改//715L

CGetTextFromUserDialogBase(wxWindow*parent,wxWindowIDid=wxID_ANY,constwxString&title=wxEmptyString,constwxPoint&poswxDefaultPosition,constwxSize&size=wxSize(403,138),longstyle=wxDEFAULT_DIALOG_STYLE);

//修改为

CGetTextFromUserDialogBase(wxWindow*parent,wxWindowIDid=wxID_ANY,constwxString&title=wxEmptyString,constwxPoint&poswxDefaultPosition,constwxSize&size=wxSize(403,138),longstyle=wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER);

窗口的大小

dialog就需要使用EndModal()或者是Destroy()来关闭

Close();

//Destroy();

//改为

//Close();

Destroy();

//1123L//Close();

//改为

EndModal(true);

//1228L//Close();

//改为

EndModal(false);

//1254L//Close();

//改为

EndModal(true);

//1466L//Close();

//改为

EndModal(true);

//1479L//Close();

//改为

EndModal(true);

//1510L//Close();

//改为

EndModal(false);

//Close();

//改为

EndModal(true);

三、运行前的小准备(根据自己需要修改)我们都知道,bitcoin默认会去寻找(windows

)C:

\Users\\AppData\Roaming目录下,新建一个bitcoin\

目录来存放bitcoin的各种东西如节点,日志,数据库文件等等。

为了不和现在电脑上正常运行的目录混淆,我们可以修改一下代码,让这个试验的bitcoin源码的存储指向其他文件夹。

在main.cpp//1353L//strDir=strprintf("%s\\Bitcoin",getenv("APPDATA"));

//修改为

strDir=strprintf("%s\\Bitcoin-debug",getenv("APPDATA"));

//1364L//strDir=strprintf("%s\\Bitcoin",strAppData.c_str());

//修改为

strDir=strprintf("%s\\Bitcoin-debug",strAppData.c_str());

这个样子,此时运行这个bitcoin项目的代码的时候,就会存储在C:

\Users\\AppData\Roaming\bitcoin-debug而不是存储在C:

\Users\\AppData\Roaming\bitcoin这个官方的目录

了,之后研究和调试都很方便,防止数据弄混。

四、运行

此时终于可以开始编译运行了。

如果没有任何问题,你将看到:

这个界面。

此时你就是已经成功编译并运行的bitcoinv0.1

源码了棒!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 视频讲堂

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1