数据库

 首页 > 数据库 > MongoDB > 使用vs2010 express编译MongoDB cxx client driver驱动

使用vs2010 express编译MongoDB cxx client driver驱动

分享到:
【字体:
导读:
         摘要:本文记录了一些mongodbcxxdriver的编译与测试过程。使用的主要编译工具为VS2010Express,项目文件使用了源代码自带的scons和后来自建的qmake版的项目文件。均可顺利编译。scons版的mongoclient.lib在链接某些测试例子时有问题,qmake版的则没有问题。另,U...

使用vs2010 express编译MongoDB cxx client driver驱动
本文记录了一些mongodb cxx driver的编译与测试过程。使用的主要编译工具为VS2010 Express,项目文件使用了源代码自带的scons和后来自建的qmake版的项目文件。均可顺利编译。scons版的mongoclient.lib在链接某些测试例子时有问题,qmake版的则没有问题。另,Ubuntu下尽管没有链接成功,由于暂时不计划使用,故没有深究。

一、下载mongodb cxx driver源代码包编译
下载路径:http://dl.mongodb.org/dl/cxx-driver/
提示:不要管文件名中含有linux,实际上是跨平台的。
1)ubuntu10.10下编译:使用scons。编译不成功,找不到boost相关lib文件。但这些库文件的确已经安装(boost1.42.0),未做进一步处理。
2)winxp下编译:创建.pro文件,在QtCreator中使用VS2010编译不过。主要问题是assert, wassert, uassert等宏找不到。但assert在pch.h文件中有定义却提示找不到。
该问题已经解决:原因是编译选项不对,参考SConstruct文件来设置编译选项。

二、从github.com下载源代码编译:
(用VS2010编译的官方说明:http://www.mongodb.org/display/DOCS/Building+with+Visual+Studio+2010)
1)下载预编译的boost包,安装到c:/boost目录
http://www.mongodb.org/pages/viewpageattachments.action?pageId=12157032
安装到c:/boost目录。可能需要lib拷贝:C:boostlibvs2010_32*.lib  -> C:boostlib。使用scons时无需拷贝lib
2)下载预编译的SpiderMonkey包,安装到mongo之../js。下载路径见官方说明链接。
3)下载源代码并使用scons编译mongodb driver
C:dev> git clone https://github.com/mongodb/mongo.git
C:dev> cd mongo
C:devmongo>git tag -l
C:devmongo>git checkout r2.0.0
C:devmongo>scons mongoclient.lib
最后编译成功:mongoclient.lib [158 MB (165,892,750 字节)]。
4)或者使用qmake来编译,可参考SConstruct文件来创建qmake版的项目文件.pro。

三、测试mongodb
1) 创建数据库目录:c:/data/db/
2) 启动服务mongod:exe文件可以从mongodb网站下载到。
    c:/dev/tools/mongodb/bin/mongod.exe --rest
3) 测试1:打开web客户端:http://localhost:28017/
4) 测试2:使用源代码里的例子编译后进行测试。

【问题与解决】
1)编译某些例子时,提示mongo::toUtf8String找不到。具体错误为:
:-1: 错误:LNK2019: unresolved external symbol "class std::basic_string,class std::allocator > __cdecl mongo::toUtf8String(class std::basic_string,class std::allocator > const &)" (?toUtf8String@mongo@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@ABV?$basic_string@GU?$char_traits@G@std@@V?$allocator@G@2@@3@@Z) referenced in function "class std::basic_string,class std::allocator > __cdecl mongo::errnoWithDescription(int)" (?errnoWithDescription@mongo@@YA?AV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@H@Z)
解决:
i) 打开c:/dev/mongo/SConstruct,在575行插入下述行:
    env.Append( CPPDEFINES=[ "_WIN32" ] )  # added by dou 20111015. for std::string toUtf8String(const std::wstring& wide) in util/text.cpp
然后再次编译。某试了一次,似乎不起作用。后改为自建pro文件,然后使用qmake编译。
ii) 使用qmake编译。根据SConstruct中的定义来创建。
2)qmake编译动态库版时有几个链接错误(即未加CONFIG += staticlib时)
解决:未解决,无需动态库,改为静态链接。即添加:CONFIG += staticlib
3)编译发行版时,尽管安装了预编译版的boost库,仍提示boost的lib文件找不到(与预编译的不一致):需要静态库版,却自动链接动态库版。
解决:编译选项问题,确认使用了/MT编译选项。/MD是动态链接,需去掉。
使用vs2010 express编译MongoDB cxx client driver驱动
分享到:
Debian和Ubuntu系统安装MongoDB数据库
Debian和Ubuntu系统安装MongoDB数据库 1.注入公共GPG KEY sudo apt-key adv --keyserver keyserver.ubuntu.com --recv 7F0CEB10 2. etc/apt/source.list添加如下命令 deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist10gen 3.更新源 sudo apt-get update 4.安装mongodb sudo ap...
MongoDB数据库安装与使用
MongoDB数据库安装与使用 导引安装 之前写的一片mongodb使用小记过于简单,当时自己觉得没有必要详细写作,因为很多自己看文档就可以轻松搞定了, 但是到自己要重新使用的时候,发现有些还是很容易忘记的。看文档固然可以理解,但是花费时间比较长, 还有一点,文档都是面向大众话的,语言讲的覆盖比较广,但...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……