版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、在 win10 vs 2015 上编译运行 bitcoin v0.1 源码 (下)上一篇文章详细描述的如何让 bitcoin v1.0 源码通过编 译,本篇将描述第一次运行过程中修改出现过的问题。一、 数据库 dll 加载出错不清楚这个问题是不是个例, bitcoin 使 用的数据库 Berkeley DB v4.8 在 oracle 官网上下载安装后 1. 使用 release 版本的 lib 和 dll 直接使用 release 版本的 dll 在 debug 下运行 bitcoin 源码会第 184 行左右,在 ReadAtCursor 函数中的 free 处崩溃: / Clear an
2、d free memorymemset(datKey.get_data(), 0, datKey.get_size(); memset(datValue.get_data(), 0, datValue.get_size();free(datKey.get_data(); / 很可能在这个地方崩溃 free(datValue.get_data();产生的原因是 01640000, 03177208 ) 呃其实我不知道产生的原因是什么,简单的搜索可能的原 因是:在不同模块(工程)之间传递 C+ 类,而这两个模 块用了不同的运行时库( Runtime Library )设置。 例如: EXE 模块调
3、用 DLL 模块里传递 C+ 类的函数,但 DLL 模块使用静态链接( Release 是 Multi-threaded (/MT)Debug 是 Multi-threaded Debug (/MTd) )方式编译,而 EXE 模块使用动态链接( Release 是 Multi-threaded DLL (/MD) 、 Debug 是 Multi-threaded Debug DLL (/MDd) )方 式编译。HEAPxxx.exe:Invalid Address specified to RtlValidateHeap 错误的解决方法总结 我也不清楚是不是 这个原因啦,这个问题先搁置下 使
4、用Zlebug版本的lib 和 dll 直接使用安装包中自带的那个 libdb48d.lib 和 libdb48d.dll 运行是直接崩溃! 如图:至今不知道原因! !我 给 oracle 神教的产品给跪了。 。更新 原因已经找到: oracle 在提供 berkeley db windows 的包的时候,所编译出来的 libdb48d.dll 是在 vs2005 或者是 vs2008 平台下构建的。它 在构建这个 libdb48.dll 和 libdb48d.dll 的时候分别依赖了 版本的 libdb48.dll 和 libdb48d.dll 。这丫是个 历史遗留问题,参考: Side-b
5、y-side assembly 这 2 个 dll 只 会在安装 vs2005 和 vs2008 的时候存在, 以后都只会以兼容 库的形式存在。但是关键是这个现在绑定版本,所以就造成 了 crash 。解决方法就是下面的第 3 点,重新编译。至于 release 为什么会自动存在,那是因为我在安装 berkeley db 的时候安装包把安装的 路径 bin 填写到了 path 变量当中, 而在这个 bin 目录下已经提供了 版本的 libdb48.dll 。但是它丫却没有在 bindebug 目录下提供libdb48d.dll 。所以就造成了 release 能运行, 但是因为其他 原因崩溃,
6、而 debug 是直接运行不起来的。3. 解决方法因为安装包中的 release 和 debug 都无法运行, 所以只能自己编译出 Berkeley DB 的 lib 和 dll 假设现在的 berkeley db 的根目录是 那么在 目录下可以找到 Berkeley_DB.sln 打开它向上兼容后,进行项目构建,然后 将一个 example 项目设为主项目进行运行。 如果能运行成功 就是构建成功并且能够正常运行。此时在 目录下可以发现 libdb48d.lib 和 libdb48d.dll 这两个文件。而这两个文件就 是在自己平台上编译出来的动态链接库。 之后把 bitcoin 源码 的关于
7、 Berkeley DB 的依赖库修改为新的路径, 然后就可以 正常运行了。这里修改的路径就是 ( 参照 上一篇 )然后把 libdb48d.dll 拷贝到 bitcoin 项目的 libs 目 录下。二、wxWidgets高版本兼容问题ps:以下的崩溃很可 能是因为 wxWidgets 版本高的原因, 要是版本低于 3.0/ 或者 2.8?(可能 )很可能就没这些问题 1. 运行崩溃崩溃的原因主 要是由于在 wxWidgets 3.0 还是 2.8 收紧了 Sizer 布局的 Align 规则检查的严格性。当布局的 flag 出现: wxEXPAND|wxALIGN_CENTER_XXX/
8、或者是/ 当 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|wxAL
9、L, 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);/ 修改为
10、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);/ 176
11、2L /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-Set
12、Sizer(bSizer79);/ 修改为this-SetSizerAndFit(bSizer79);/ 487L/fgSizer1 = new wxFlexGridSizer(3, 2, 0, 0);/ 修改为fgSizer1 = new wxFlexGridSizer(4, 2, 0, 0);/ 注:这里很特别,是因为加入的元素超过了一开始规划好的 3 行 2 列, 所以这里改成 4 行 2 列在 uibase.h 中修改 / 715LCGetTextFromUserDialogBase(wxWindow* parent,wxWindowID id = wxID_ANY,const wxS
13、tring& title = wxEmptyString, const wxPoint& poswxDefaultPosition, const wxSize& size = wxSize(403,138),long style = wxDEFAULT_DIALOG_STYLE);/ 修改为CGetTextFromUserDialogBase(wxWindow* parent,wxWindowID id = wxID_ANY,const wxString& title = wxEmptyString, const wxPoint& poswxDefaultPosition, const wxS
14、ize& size = wxSize(403, 138),long style =wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER);/ 就是在最后添加上一个 wxRESIZE_BORDER 可以改变窗口的大小2. 无法关闭 dialog 对话框这个问题其实还是挺奇葩的这个UI库升级了以后,对于 dialog来说close就不 起作用了。所以对于使用 showModal() 打开的对话框 dialog 就需要使用 EndModal() 或者是 Destroy() 来关闭 在 ui.cpp 中/ 1190LClose();/Destroy();/ 改为/Close
15、();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);/ 1518L/ Close();/ 改为EndModal(true);三、运行前的小准备 (根据自己需要修改 )我们都知道, bitc
16、oin 默认会去寻找 (windows下 )C:UsersAppDataRoaming 目录下,新建一个 bitcoin 目录来存放 bitcoin 的各种东西如节点,日志,数据库文件 等等。为了不和现在电脑上正常运行的目录混淆,我们可以 修改一下代码, 让这个试验的 bitcoin 源码的存储指向其他文 件夹。在 main.cpp/ 1353L/strDir = strprintf(%sBitcoin, getenv(APPDATA);/ 修改为strDir = strprintf(%sBitcoin-debug,getenv(APPDATA);/ 1364L/strDir = strprintf(%sBitcoin, strAppData.c_str();/ 修改为strDir = st
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业营销管理的11项原则
- 《材料加工检测技术》教学大纲
- 教案第一课神奇的货币
- 玉溪师范学院《田径》2023-2024学年第一学期期末试卷
- 经济贸易毕业论文:中国外贸竞争力探究
- 玉溪师范学院《普通话与教师口语》2021-2022学年第一学期期末试卷
- 会计从业资格考试财经法规教案
- 建筑公司规章制度范本
- 销售部门年终工作总结课件模板
- 东南亚运动户外电商行业市场洞察
- 2024年工程承包合同协议书模板
- 第五节 错觉课件
- 2024-2030年中国水煤浆行业发展规模及投资可行性分析报告
- 2024中国石油报社高校毕业生招聘6人管理单位遴选500模拟题附带答案详解
- 电玩城员工服务培训
- 2024-2030年陕西省煤炭行业市场发展分析及发展前景预测研究报告
- 《中华人民共和国安全生产法》知识培训
- 北京市昌平区2023-2024学年高二上学期期末质量抽测试题 政治 含答案
- 2024-2030年中国融资租赁行业市场发展分析及前景趋势与投资前景研究报告
- 自然资源调查监测技能竞赛理论考试题库大全-下(判断题)
- 呕吐(急性胃肠炎)诊疗指南(制订)编制说明排版
评论
0/150
提交评论