mongodb c++ driver(2.53)windows编译
编译环境:
(1) 下载python2.7, 使用x86_32位,因为scons只有32位安装包可用;
(2) 下载scons2.3.0,The current production release of SCons is 2.3.0;
(3) 安装python 和 scons, 将C:\Python27\Scripts写入PATH;
(4) 安装boost1.54版本的库,直接下载windows版本编译好的库,目录c:\boost
(5) 在c:\boost里建立一个include目录,然后将c:\boost\boost目录放到include里面,即c:\boost\include\boost\..
(6) 在c:\boost里建立一个lib目录,然后将boost的lib文件放在lib目录下
(7) 直接下载mongodb整个源码https://github.com/mongodb/mongo.git(最新版本2.5.3),c++ driver的源码也在其中,目录c:\mongo
(8) 修改scons的编译文件,这个文件在我机器上运行有点问题,怎么都不能取得boost lib的文件,于是直接修改源码c:\mongo\SConstruct
if use_system_version_of_library("boost"): if not conf.CheckCXXHeader( "boost/filesystem/operations.hpp" ): print( "can't find boost headers" ) Exit(1) conf.env.Append(CPPDEFINES=[("BOOST_THREAD_VERSION", "2")]) for b in boostLibs: l = "boost_" + b conf.FindSysLibDep(l, [ l + boostCompiler + "-mt" + boostVersion, l + boostCompiler + boostVersion ], language='C++' )
修改后的代码:
boostCompiler和boostVersion是自己定义,比如我的c:\boost\lib下面的lib文件只这样的boost_filesystem-vc100-1_55.lib,所以我定义为
boostCompiler = "-vc100" boostVersion = "-1_55"
这两个参数是可以在scons里定义的,但是我定义的没有效果,我也没有去深度查找为什么,只要能编译就可以了
if use_system_version_of_library("boost"): if not conf.CheckCXXHeader( "boost/filesystem/operations.hpp" ): print( "can't find boost headers" ) Exit(1) conf.env.Append(CPPDEFINES=[("BOOST_THREAD_VERSION", "2")]) for b in boostLibs: l = "boost_" + b boostCompiler = "-vc100" # 这里的值,根据boost版本自己修改 boostVersion = "-1_55" # 这里的值,根据boost版本自己修改 conf.FindSysLibDep(l, [ l + boostCompiler + "-mt" + boostVersion, l + boostCompiler + boostVersion ], language='C++' ) print l # 这是我自己打印出来,看是否是正确的值 print l + boostCompiler + "-mt" + boostVersion # 这是我自己打印出来,看是否是正确的值 print l + boostCompiler + boostVersion # 这是我自己打印出来,看是否是正确的值
开始编译mongodb c++ driver:
(1) 打开vs2010的x64 promtp cmd
(2) C:\mongo>scons --full --use-system-boost --extrapath=c:/boost install-mongoclient --64 --dbg=on 这样编译出来的就是64位的debug版本,是MTd的
C:\mongo>scons --full --use-system-boost --extrapath=c:/boost install-mongoclient --64 这样是64位的release版本,是MT的
具体scons的参数可以参考http://docs.mongodb.org/ecosystem/tutorial/download-and-compile-cpp-driver/
我的编译过程提示:
C:\mongo>scons --full --use-system-boost --extrapath=c:/boost install-mongoclit --64 --dbg=on scons: Reading SConscript files ... win32 scons version: 2.3.0 python version: 2 7 0 'final' 0 Checking whether the C++ compiler works(cached) yes Checking whether the C compiler works(cached) yes Checking if C++ compiler "$CC" is MSVC... (cached) yes Checking if C compiler "cl" is MSVC... (cached) yes Checking for __declspec(thread)... (cached) yes Checking for C++ header file boost/filesystem/operations.hpp... (cached) yes Checking for C++ library boost_thread-vc100-mt-1_55... (cached) yes boost_thread boost_thread-vc100-mt-1_55 boost_thread-vc100-1_55 Checking for C++ library boost_filesystem-vc100-mt-1_55... (cached) yes boost_filesystem boost_filesystem-vc100-mt-1_55 boost_filesystem-vc100-1_55 Checking for C++ library boost_program_options-vc100-mt-1_55... (cached) yes boost_program_options boost_program_options-vc100-mt-1_55 boost_program_options-vc100-1_55 Checking for C++ library boost_system-vc100-mt-1_55... (cached) yes boost_system boost_system-vc100-mt-1_55 boost_system-vc100-1_55 Checking for C header file unistd.h... (cached) no Checking whether clock_gettime is declared... (cached) no Checking for C++ header file execinfo.h... (cached) no Checking for C library pcap... (cached) no Checking for C library wpcap... (cached) no
在vs2010中使用,注意添加头文件目录,mongodb默认生成目录是在c:/usr/local/include,boost在c:/boost/include
添加lib目录,c:/usr/local/lib,c:/boost/lib, 需要使用的lib文件Ws2_32.lib;libmongoclient.lib;DbgHelp.lib
然后就ok了,可以正常使用了,测试通过。