• 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的需求就可以初步的实现了。

  • 相关阅读:
    vue-router路由器的使用
    组件间数据传递
    引用模块和动态组件
    vue自定义全局和局部指令
    vue实例的属性和方法
    vue生命周期以及vue的计算属性
    vue 发送ajax请求
    安装vue-cli脚手架
    vue指令详解
    scrapy-redis组件的使用
  • 原文地址:https://www.cnblogs.com/rhythmic/p/14645496.html
Copyright © 2020-2023  润新知