centos7.9配置mongo-cxx-driver笔记

项目需求中,需要在centos服务器下使用高级语言c++操作mongoDB数据库,因此需要进行环境的配置,踩了两天的坑,这里简单的记录一下收获总结。

mongo-cxx-driver的配置主要分为如下几个步骤

0.centos下配置mongoDB

1.mongo-c-driver的安装配置

2.c++ polyfill

3.mongo-cxx-driver的安装配置、

4.mongo-cxx-driver的安装

5.代码测试

这个步骤基本是按照官方的c++驱动文档的步骤走的。

官方文档:http://mongocxx.org/mongocxx-v3/installation/linux/

中文翻译版本:https://blog.csdn.net/qq_33462307/article/details/90237130

这里主要记录一下自己踩到的坑。

centos下配置mongoDB

这个之前已经写成的文档,后面考虑将内容合并进来

mongo-c-driver的安装配置

这里需要说明的是,如果进行mongo-cxx-driver的配置,这个是前提条件,这个坑我猜了好久,看文档不仔细,下意识的以为mongo-c-driver和mongo-cxx-driver是并列的关系,所以在配置过程中一开始就没有去配置mongo-c-driver,因此在mong-cxx-driver的make阶段就一直卡住。

官网参考文档:http://mongoc.org/libmongoc/current/installing.html

博客参考文档:https://blog.csdn.net/weixin_33769207/article/details/92302840

这里主要的命令如下

wget https://github.com/mongodb/mongo-c-driver/releases/download/1.3.5/mongo-c-driver-1.3.5.tar.gz
##这里需要根据自己版本的需要,因为mongo-cxx-driver是对mongo-c-drvier的版本有要求##的,我这里安装的是mongo-c-driver-1.17.5
tar xzf mongo-c-driver-1.3.5.tar.gz
##解压github下载的包
cd mongo-c-driver-1.3.5

##以上的指令没什么问题,但是随着开源项目的发展,项目里面的内容组件重构,很多以前的指引##文档是不太好用的,这也是给我们刚入门的技术小白一个启示,我在文末在进行总结。

##结合官方文档,我能够成功make的指令操作序列如下
mkdir cmake-build
cd cmake-build
cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP = OFF ..
##这一步进行安装的配置
cmake --build
make
make install

c++ polyfill

这里我在配置的过程中没怎么搞懂这步在干什么,也没去配置,没有影响最后的测试成功,这里需要留一个坑,以后有空回来填。

mongo-cxx-driver的安装配置

这一步其实也是蛮简单的,继续跟着文档走。值得一提的是,配置操作由于指令看起来好像很复杂,不那么友好,主要是配置安装路径的,但是基本软件包在安装的时候都是有default path的,我们在后续的路径配置、链接的过程中,使用locate指令来显式的找到路径即可。

wget https://github.com/mongodb/mongo-cxx-driver/archive/r3.0.1.tar.gz
tar xzf r3.0.1.tar.gz
cd mongo-cxx-driver-r3.0.1/build
#这里我下载的版本是3.17,对应的mongo-c-driver需要超过1.17
#需要先安装好git,yum -y install git,不然会报错
PKG_CONFIG_PATH=/usr/local/lib/pkgconfig cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local/ ..
#依然是安装配置
make
make install

然后还需要进行驱动的配置,这里配置指令其实我没有特别搞懂。但是在最后成功的测试中前面走了这一步,不知道有没有用,先记下一笔。

cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local ..

其实到这里,就已经安装完成了,这里需要关注我们安装的驱动存放的路径,这个十分重要,在后面gcc编译链接的时候需要用到。

我们的mongocxx/usr/local/include下,于此同时/usr/local/include还有一个bsoncxx的目录,我们在测试中也会用到。

我们的libmongoc.so/usr/local/lib64下,这里会有坑,有的系统是在/usr/local/lib下,这个需要自己亲自确定一下。

为什么要记录这些东西呢?因为我测试的时候是采用的gcc编译的形式,没有ide集成环境,如果是windows下的ide需要自己手动添加的ide的链接库。上面这些东西主要是我们mongo-cxx-driver的头文件和库文件。

代码的测试

这一部分最终要的其实就是测试代码的编译,编译需要手动链接,这里踩坑猜了好久。关注到上面我们需要的几个文件的位置,或者你在测试代码导入的头文件的位置,在编译的时候进行手动链接,即可编译通过并且运行成功。

给出一段测试代码,更多的测试文档后续更新,也可以参照上面给出的官方文档。

#include<iostream>
#include<bsoncxx/builder/stream/document.hpp>
#include<bsoncxx/json.hpp>
#include<mongocxx/client.hpp>
#include<mongocxx/instance.hpp>
using namespace std;
int main(){
    mongocxx::instance inst{};
    mongocxx::client conn{mongocxx::uri{}};
  
    bsoncxx::builder::stream::document document{};
    auto collection = conn["testdb"]["testcollection"];
    document << "hello" << <<"world";
    
    collection.insert_one(document.view());
    auto cursor = collection.find({});
    for(auto && doc : cursor)
         std:: cout << bsoncxx::tojson(doc) << std::endl;
}

编译指令:

c++ --std=c++11 test1.cpp -o test1 \
-I/usr/local/include/mongocxx/v_noabi \
-I/usr/local/include/bsoncxx/v_nobi   \
-L/usr/local/lib64 -lmongocxx -lbsoncxx

这里记录一个踩到的坑,其实本质还是编译链接的坑。我在手动确定好所有链接所需要的库文件的地址之后,编译返回报错:

./tests: error while loading shared libraries: xxx.so.0:cannot open shared object file: No such file or directory

这个错误是系统不知道xxx.so放在哪个目录下,需要手动添加这个xxx.so所在路径。具体步骤如下所示:

locate xxx.so
#找到路径
cd /etc
vim ld.so.conf
##然后加入上面找到的路径 录入/usr/local/lib
/sbin/ldconfig –v 
#更新配置文件

经过以上步骤就可以初步完成在centos7.9上mong-cxx-driver的配置了。之所以说出不,是有可能后续的测试使用中会遇到新的问题,到时候在持续更新这个技术文档。

总结一下这两天配环境的体验和收获。

1.坚持看英文文档,中文文档有一些质量太差,基本都是指引,不知其所以然,出了问题就容易不知道怎么做。一开始我在链接编译的路径上卡了很长时间,就是因为不熟悉g++编译链接的原理,英文文档通常是开源项目最新版本的技术文档,能够保证和你的软件是对应的。由于开源软件随着时间的迁移内部的组件会重构,比如较早版本的(博客文章甚至到了2011)的mongo-cxx-driver的安装,都提到了用scons,但是后来最新版本都用cmake了。

2.主要的点在第一点都说完了,主要是要踩坑之后写技术文档总结反思自己的收获,而不能够每次都是从零开始。留下技术文档,用到的代码指令都是次要的,主要是要进行反复的反思总结和回溯。总结文档可能非常简介短小,但是中间遇到了很多问题和解决方法,因此阶段性的总结和回顾整理非常重要。

配置mongo-cxx-driver之后,项目中的需求sql转存mongo的需求就可以初步的实现了。

posted on 2021-04-11 21:00  在苏州的城边  阅读(364)  评论(0编辑  收藏  举报

导航