热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

boost与mongodb分析

考虑到mongodb使用了boost库源码,参考mongodb官方文档后,下载编译boost版本是1.42(时间为2010-2-2)或更新版本:boost版本1.42:http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/do
考虑到mongodb使用了boost库源码,参考mongodb官方文档后,下载编译boost版本是1.42(时间为2010-2-2)或更新版本: boost版本1.42:
http://sourceforge.net/projects/boost/files/boost/1.42.0/boost_1_42_0.zip/download
下载boost源码之后,我把boost解压在D盘。

1.在D:/boost_1_42_0/下找到该批处理文件bootstrap.bat,以vs2010命令行方式运行它,并最终生成bjam.exe可执行文件(详细结果及错误信息见生成的bjam.log日志)
2.将生成的bjam.exe文件拷贝到“D:/boost_1_42_0”目录下,运行下面命令行

bjam stage variant=debug --stagedir="d:/boost_1_42_0" --with-filesystem --with-thread --with-date_time --with-program_options --layout=versioned threading=multi toolset=msvc-10.0
如下图:

注:i.如果要生成release链接库文件,需将上面的variant设置成release,形如:
bjam stage variant=release .....
ii.如果要全部生成使用下面编译选项
bjam ...... --build-type=complete
编译过程可能会用一些时间,最终会在"D:/boost_1_42_0" 生成一个lib目录,里面包括刚生成的库文件。
3.下载已用vs2010编译的SpiderMonkey库文件及源码包,并将其解压到D盘下,下载链接:
https://github.com/dwight/vc2010_js
将该文件夹名称改为“js”(因为mongodb项目会默认指定该路径寻找可用的lib及c源文件),如下图:

说明:SpiderMonkey是由C语言操作的Javascript引擎,它支持JS1.4和ECMAScript-262规范。该引擎分析、编译和执行脚本,根据JS数据类型和对象的需要进行内存分配及释放操作。目前它是Mozilla项目的一部分。可通过下面链接了解更多信息:
https://developer.mozilla.org/en/SpiderMonkey
源码下载链接:
https://developer.mozilla.org/En/SpiderMonkey/Getting_SpiderMonkey_source_code
另外如何使用spidermonkey参见:
http://www.ibm.com/developerworks/cn/linux/shell/js/js_engine/
4.接下来下载并解压mongod源码包(本人下载的是其最新版本:r1.8.0-rc1),这里我将其也解压在了D盘:
mongodb-src-r1.8.0-rc1:
https://github.com/mongodb/mongo/zipball/r1.8.0-rc1
之后利用vs2010打开 D:/mongodb-mongo-4d2aeb6/db目录下的解决方案文件“db_10.sln”, 加载之后的视图如下:

在其中的mongod项目上,点击鼠标右键,打开"属性"对话框, 在“配置属性”-“c++目录”-"包含目录"中点“编辑”:

添加对上面的boost源码文件路径的包含:

设置库文件目录选项中添加对刚编译的boost库的路径"D:/boost_1_42_0/lib"声明,如下图:


在C/C++常规--“附加包含目录”,中添加"D:/boost_1_42_0"声明,如下图:

5.因为我的机器是32位系统,而下载的mongodb项目设置为64位,所以要修改一下编译方式,如下图

一切就绪后,开始编译,时间比较长,耐心等待...
注:如出现“pch.h文件无法打开”的错误信息时,只要在VS2010中的开该文件即可。
6.如果要调试的话,打开“项目属性”--“配置属性”--“调试”--“命令参数”,输入如下参数 :
"--dbpath d:/mongodb/db" "--port 27017"

然后找出db.cpp文件,将断点放在如下函数的第一行代码处: int main(int argc, char* argv[])
如下图:

需要说明的是,我一开始使用的是VS2008,但mongodb源码在最新版本中好像就不再提供vs2008的项目文件了,另外我使用vs2008也一直没有成功编译过mongodb,不是缺文件就是链接库编译时有问题(google一下,发现国外同行也被类似问题困扰)。所以大家也就不要再VS2008编译上浪费时间了。
好了,到这里主要的内容介绍完了,大家可以通过调试来分析观察MONGODB代码的执行流程了。
参考链接:
http://www.cnblogs.com/wondering/archive/2009/05/21/boost_setup.html
http://www.cnblogs.com/xdotnet/archive/2008/03/22/boost_install_config.html
http://www.mongodb.org/display/DOCS/Building+with+Visual+Studio+2010
bjam --toolset=msvc --stagedir=./lib_x86 --builddir=./ address-model=32 link=shared runtime-link=shared threading=multi stage debug release
bjam --toolset=msvc --stagedir=./lib_x86 --builddir=./ address-model=32 link=static runtime-link=shared threading=multi stage debug release
bjam --toolset=msvc --stagedir=./lib_x86 --builddir=./ address-model=32 link=static runtime-link=static
threading=multi stage debug release
--build-dir=
编译的临时文件会放在builddir里(这样比较好管理,编译完就可以把它删除了)
 --stagedir=
存放编译后库文件的路径,默认是stage
 --build-type=complete
编译所有版本,不然只会编译一小部分版本(确切地说是相当于:variant=release, threading=multi;link=shared|static;runtime-link=shared)
 variant=debug|release
决定编译什么版本(Debug or Release?)
 link=static|shared
决定使用静态库还是动态库。
 threading=single|multi
决定使用单线程还是多线程库。
 runtime-link=static|shared
决定是静态还是动态链接C/C++标准库。
 --with-
只编译指定的库,如输入--with-regex就只编译regex库了。
 --show-libraries
显示需要编译的库名称 不使用系统的cmd使用编译器自己的cmd

推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • Google Play推出全新的应用内评价API,帮助开发者获取更多优质用户反馈。用户每天在Google Play上发表数百万条评论,这有助于开发者了解用户喜好和改进需求。开发者可以选择在适当的时间请求用户撰写评论,以获得全面而有用的反馈。全新应用内评价功能让用户无需返回应用详情页面即可发表评论,提升用户体验。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文介绍了响应式页面的概念和实现方式,包括针对不同终端制作特定页面和制作一个页面适应不同终端的显示。分析了两种实现方式的优缺点,提出了选择方案的建议。同时,对于响应式页面的需求和背景进行了讨论,解释了为什么需要响应式页面。 ... [详细]
  • Centos7搭建ELK(Elasticsearch、Logstash、Kibana)教程及注意事项
    本文介绍了在Centos7上搭建ELK(Elasticsearch、Logstash、Kibana)的详细步骤,包括下载安装包、安装Elasticsearch、创建用户、修改配置文件等。同时提供了使用华为镜像站下载安装包的方法,并强调了保证版本一致的重要性。 ... [详细]
  • Netty源代码分析服务器端启动ServerBootstrap初始化
    本文主要分析了Netty源代码中服务器端启动的过程,包括ServerBootstrap的初始化和相关参数的设置。通过分析NioEventLoopGroup、NioServerSocketChannel、ChannelOption.SO_BACKLOG等关键组件和选项的作用,深入理解Netty服务器端的启动过程。同时,还介绍了LoggingHandler的作用和使用方法,帮助读者更好地理解Netty源代码。 ... [详细]
  • http:valor-software.comng2-bootstraphttps:www.primefaces.orgprimeng#autocomplete转载于:https: ... [详细]
author-avatar
gl君
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有