mongodb的编译

来源:互联网 发布:java redis2.6 教程 编辑:程序博客网 时间:2024/05/18 00:04
         目前我们使用的mongodb的版本是1.8.2,前段时间mongodb已经升级到了2.0.0了,做了很多重要的修改。而在我们日常使用的过程中经常使用map/reduce操作,Spider Monkey的JS内核不够给力,因此准备编译一个v8内核的mongodb 2.0出来。

         我们基本上是按照官方的说明文档来编译的,http://www.mongodb.org/display/DOCS/Building。安装之前需要做好准备,安装gc++,boost,scons等。

         在编译v8的时候,出现了Cannot find bz2的错误,提示系统没有安装bz2的库,使用find命令找了一下,系统中存在libbz2.so.1文件了,我只需要建立一个libbz2.so的符号链接就行了。

         编译v8完成后,继续编译mongod,又出现了Can notfind v8的错误,find了一下,系统中存在v8的lib的,开始以为是路径不对,修改了LD_LIBRARY_PATH后还是不行;使用file命令看了一下,才发现原来刚才编译的v8是32位的,使用scons arch=x64,重新编译了v8。(后来在http://www.howsthe.com/blog/2010/feb/22/mongodb-and-v8/这个链接的评论里发现有人有同样的问题)

         解决了v8的编译后,继续编译,链接时出现了符号不能找到的错误,google了很久,才发现是boost的版本问题,老版本的boost已经没有这个符号链接了。只好重新安装boost,结果系统中就存在两个boost版本了,需要指定路径来编译了,scons all --usev8 --libpath=/usr/local/lib,终于编译成功了。

         编译成功后,我将我编译出来的mongod和官方编译的mongod使用ldd命令比较了一下,发现我多了一些boost的链接。看来要使用静态链接才行,只好使用scons all --usev8 --staticlibpath=/usr/local/lib--staticlib=boost_system,boost_thread,boost_filesystem,boost_program_options重新编译了一下,这下子才真正的大功告成。

         一般从源代码编译开源软件,最关键的问题就是库找不到,主要的原因就是库路径设置不对,这一次却是其他原因找不到库。抓住这些原因基本上就不怕编译开源软件了。