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

使用vs2010express编译MongoDBcxxclientdriver驱动

本文记录了一些mongodbcxxdriver的编译与测试过程。使用的主要编译工具为VS2010Express,项目文件使用了源代码自带的scons和后来自建的qmake版的项目文件。均可顺利编译。scons版的mongoclient.lib在链接某些测试例子时有问题,qmake版的则没有问题。另,U
本文记录了一些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:\boost\lib\vs2010_32\*.lib  -> C:\boost\lib\。使用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:\dev\mongo>git tag -l
C:\dev\mongo>git checkout r2.0.0
C:\dev\mongo>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是动态链接,需去掉。

推荐阅读
  • 嵌入式开发环境搭建与文件传输指南
    本文详细介绍了如何为嵌入式应用开发搭建必要的软硬件环境,并提供了通过串口和网线两种方式将文件传输到开发板的具体步骤。适合Linux开发初学者参考。 ... [详细]
  • 在现代网络环境中,两台计算机之间的文件传输需求日益增长。传统的FTP和SSH方式虽然有效,但其配置复杂、步骤繁琐,难以满足快速且安全的传输需求。本文将介绍一种基于Go语言开发的新一代文件传输工具——Croc,它不仅简化了操作流程,还提供了强大的加密和跨平台支持。 ... [详细]
  • 解决微信电脑版无法刷朋友圈问题:使用安卓远程投屏方案
    在工作期间想要浏览微信和朋友圈却不太方便?虽然微信电脑版目前不支持直接刷朋友圈,但通过远程投屏技术,可以轻松实现在电脑上操作安卓设备的功能。 ... [详细]
  • 本文介绍如何在Linux Mint系统上搭建Rust开发环境,包括安装IntelliJ IDEA、Rust工具链及必要的插件。通过详细步骤,帮助开发者快速上手。 ... [详细]
  • Mongoose 5.12.10 发布:MongoDB 异步对象模型工具的新特性与修复
    Mongoose 是一款专为异步环境设计的 MongoDB 对象模型工具,支持 Promise 和回调函数。最新版本 Mongoose 5.12.10 带来了多项修复和改进,包括查询选项中的默认值设置、嵌入式判别器填充、以及 TypeScript 定义文件的优化。 ... [详细]
  • Docker的安全基准
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 选择适合生产环境的Docker存储驱动
    本文旨在探讨如何在生产环境中选择合适的Docker存储驱动,并详细介绍不同Linux发行版下的配置方法。通过参考官方文档和兼容性矩阵,提供实用的操作指南。 ... [详细]
  • 云计算的优势与应用场景
    本文详细探讨了云计算为企业和个人带来的多种优势,包括成本节约、安全性提升、灵活性增强等。同时介绍了云计算的五大核心特点,并结合实际案例进行分析。 ... [详细]
  • 在创建新的Android项目时,您可能会遇到aapt错误,提示无法打开libstdc++.so.6共享对象文件。本文将探讨该问题的原因及解决方案。 ... [详细]
  • 本文详细介绍了如何在预装Ubuntu系统的笔记本电脑上安装Windows 7。针对没有光驱的情况,提供了通过USB安装的具体方法,并解决了分区、驱动器无法识别等问题。 ... [详细]
  • 本文探讨了为何相同的HTTP请求在两台不同操作系统(Windows与Ubuntu)的机器上会分别返回200 OK和429 Too Many Requests的状态码。我们将分析代码、环境差异及可能的影响因素。 ... [详细]
  • 2012年7月30日,语言岛团队宣布其智能记单词软件V0.3.4.554版本正式开源。该版本不仅支持跨平台使用,还引入了多项创新功能,旨在帮助用户更高效地记忆单词。 ... [详细]
  • 在编译BSP包过程中,遇到了一个与 'gets' 函数相关的编译错误。该问题通常发生在较新的编译环境中,由于 'gets' 函数已被弃用并视为安全漏洞。本文将详细介绍如何通过修改源代码和配置文件来解决这一问题。 ... [详细]
author-avatar
戚敦崩
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有