热门标签 | 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是动态链接,需去掉。

推荐阅读
  • H5技术实现经典游戏《贪吃蛇》
    本文将分享一个使用HTML5技术实现的经典小游戏——《贪吃蛇》。通过H5技术,我们将探讨如何构建这款游戏的两种主要玩法:积分闯关和无尽模式。 ... [详细]
  • 从理想主义者的内心深处萌发的技术信仰,推动了云原生技术在全球范围内的快速发展。本文将带你深入了解阿里巴巴在开源领域的贡献与成就。 ... [详细]
  • 本文详细介绍了如何正确设置Shadowsocks公共代理,包括调整超时设置、检查系统限制、防止滥用及遵守DMCA法规等关键步骤。 ... [详细]
  • 本文分享了作者在不同版本的Ubuntu系统上尝试编译VLC for Android的经历,包括遇到的技术难题及解决方案,旨在帮助开发者避免常见的编译问题。 ... [详细]
  • 在Ubuntu 18.04上使用Nginx搭建RTMP流媒体服务器
    本文详细介绍了如何在Ubuntu 18.04上使用Nginx和nginx-rtmp-module模块搭建RTMP流媒体服务器,包括环境搭建、配置文件修改和推流拉流操作。适用于需要搭建流媒体服务器的技术人员。 ... [详细]
  • Ubuntu 22.04 安装搜狗输入法详细指南及常见问题解决方案
    本文将详细介绍如何在 Ubuntu 22.04 上安装搜狗输入法,并提供常见问题的解决方法。包括下载安装包、更新源、安装依赖项等步骤。 ... [详细]
  • Docker安全策略与管理
    本文探讨了Docker的安全挑战、核心安全特性及其管理策略,旨在帮助读者深入理解Docker安全机制,并提供实用的安全管理建议。 ... [详细]
  • CRZ.im:一款极简的网址缩短服务及其安装指南
    本文介绍了一款名为CRZ.im的极简网址缩短服务,该服务采用PHP和SQLite开发,体积小巧,约10KB。本文还提供了详细的安装步骤,包括环境配置、域名解析及Nginx伪静态设置。 ... [详细]
  • 调试利器SSH隧道
    在开发微信公众号或小程序的时候,由于微信平台规则的限制,部分接口需要通过线上域名才能正常访问。但我们一般都会在本地开发,因为这能快速的看到 ... [详细]
  • 本文介绍了Linux操作系统的核心组成部分——内核及其版本分类,以及市面上常见的几种Linux发行版,旨在为初学者提供一个清晰的学习路径。 ... [详细]
  • 本文介绍了如何在不同操作系统上安装Git,以及一些基本和高级的Git操作,包括项目初始化、文件状态检查、版本控制、分支管理、标签处理、版本回退等,并简要提及了开源许可协议的选择。 ... [详细]
  • 在 Ubuntu 22.04 LTS 上部署 Jira 敏捷项目管理工具
    Jira 敏捷项目管理工具专为软件开发团队设计,旨在以高效、有序的方式管理项目、问题和任务。该工具提供了灵活且可定制的工作流程,能够根据项目需求进行调整。本文将详细介绍如何在 Ubuntu 22.04 LTS 上安装和配置 Jira。 ... [详细]
  • Ubuntu 14.04 系统安装后网卡名称修改方法
    本文介绍了在安装 Ubuntu 14.04 Server 版本后,如何将默认的网卡名称从非 eth 格式修改为传统的 eth 格式,并提供了详细的步骤和示例。 ... [详细]
  • MongoDB核心概念详解
    本文介绍了NoSQL数据库的概念及其应用场景,重点解析了MongoDB的基本特性、数据结构以及常用操作。MongoDB是一个高性能、高可用且易于扩展的文档数据库系统。 ... [详细]
  • 本文详细介绍如何在忘记MySQL服务器密码的情况下进行密码重置,包括具体的步骤和注意事项。 ... [详细]
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社区 版权所有