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