编译环境:
(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", "")])
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", "")])
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了,可以正常使用了,测试通过。