安装mongo-c-driver和mongo-cxx-driver中遇到的部分问题及解决办法

一、安装mongodb

请安官网安装即可:

https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/

二、安装mongo-c-driver中可能会遇到的问题

1、如果安装mongo-cxx-driver时出现找不到libmongoc,libbson,等。请确定自己是否按照官网教程正确安装了mongo-c-driver.

在安装mongo-cxx-driver时,如果出现
not find libmongc-1.0-0, libmongoc, libbson
请确定是否正确安装mongo-c-driver,只有正确安装mongo-c-driver才会自动安装libmongc-1.0-0。其他的请按照官网教程正确安装(请不要忽略安装中最后出现的error,很可能就是没有装上)。 
http://mongoc.org/libmongoc/current/installing.html (官网教程,这句是在安装mongo-cxx-driver时遇见的问题回溯到这里)
如果未正常安装,请需要重新安装mongo-c-driver

2、其中可能出现了以下报错
/usr/bin/ld: /usr/local/lib/libsnappy.a(snappy.cc.o): undefined reference to symbol '_ZSt20__throw_length_errorPKc@@GLIBCXX_3.4'
//usr/lib/x86_64-linux-gnu/libstdc++.so.6: 无法添加符号: DSO missing from command line
collect2: error: ld returned 1 exit status
src/libmongoc/CMakeFiles/test-libmongoc.dir/build.make:1676: recipe for target 'src/libmongoc/test-libmongoc' failed
make[2]: *** [src/libmongoc/test-libmongoc] Error 1
CMakeFiles/Makefile2:1369: recipe for target 'src/libmongoc/CMakeFiles/test-libmongoc.dir/all' failed
make[1]: *** [src/libmongoc/CMakeFiles/test-libmongoc.dir/all] Error 2
Makefile:171: recipe for target 'all' failed
make: *** [all] Error 2
这是mongo-c-driver测试样例编译错误,我们可以选择直接干掉,方法为编辑mongo-c-driver的CMakeCache.txt文件,修改ENABLE_TESTS:BOOL=OFF,或者在cmake的时候修改,命令如下,注意TEST后面有S:

cmake -DENABLE_AUTOMATIC_INIT_AND_CLEANUP=OFF -DCMAKE_BUILD_TYPE=Release -DENABLE_TESTS=OFF ..
这个错误参考了文章:
https://www.cnblogs.com/ealamyan/p/9903299.html

 

三、安装mongo-cxx-driver中可能会遇到的问题


3、如果正确安装了mongo-c-driver的话,那么按官网教程安装mongo-cxx-driver即可,
http://mongocxx.org/mongocxx-v3/installation/ (官网教程,如果正确按照官网教程,一般都不会报错)。

4、在进行代码测试运行命令:
c++ --std=c++11 test.cpp -o test $(pkg-config --cflags --libs libmongocxx)
时,如果报错

error while loading shared libraries: libmongocxx.so._noabi: cannot open shared object file: No such file or directory。

5、先检查缺少的动态库:运行命令:
ldd test(这个test指的是你上面运行的命令生成的o文件,根据自己的文件来写)
这时会提示libmongocxx.so._noabi   not found
                      libbsoncxx.so._noabi   not found


6、使用命令:(查找这两个文件在哪里)
sudo find / -name libmongocxx.so._noabi
sudo find / -name libbsoncxx.so._noabi


7、使用命令:(发现是个链接文件,指向了真实文件)
ls -l /usr/local/lib/libmongocxx.so._noabi   (这里的路径是你查找出来的路径,一般放在这里)
ls -l /usr/local/lib/libbsoncxx.so._noabi


8、然后删掉这两个链接文件(自己执行命令)
然后重新手动链接这两个文件就可以了:(注意自己的文件版本)
sudo ln -s /usr/local/lib/libmongocxx.so.3.4.0 /usr/local/lib/libmongocxx.so._noabi
sudo ln -s /usr/local/lib/libbsoncxx.so.3.4.0 /usr/local/lib/libbsoncxx.so._noabi

9、然后重新加载整个库,并查看test是否找到了所需的库:
sudo ldconfig
ldd test

10、执行后发现test找到了所需的库,那么这个时候再执行
c++ --std=c++11 test.cpp -o test $(pkg-config --cflags --libs libmongocxx)
就可以了,然后再度执行运行test的命令:
./test     (要记得在它所在的目录下执行)

11、如果报错了,(可能是没启动mongd服务):
sudo service mongod start
即可,如果再运行test还是报错,确定mongod服务是否真的启动了
sudo service mongod status

12、如果出现这样类似这样的报错
mongod.service - MongoDB Database Server
   Loaded: loaded (/lib/systemd/system/mongod.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Thu 2020-04-30 14:41:08 CST; 37s ago
     Docs: https://docs.mongodb.org/manual
  Process: 2971 ExecStart=/usr/bin/mongod --config /etc/mongod.conf (code=exited, status=2)
 Main PID: 2971 (code=exited, status=2)

4月 30 14:41:08 Jc-F117-V systemd[1]: Started MongoDB Database Server.
4月 30 14:41:08 Jc-F117-V mongod[2971]: Scalar option 'net.bindIp' must be a single value
4月 30 14:41:08 Jc-F117-V mongod[2971]: try '/usr/bin/mongod --help' for more information
4月 30 14:41:08 Jc-F117-V systemd[1]: mongod.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
4月 30 14:41:08 Jc-F117-V systemd[1]: mongod.service: Failed with result 'exit-code'.

请确定/etc/mongod.conf这个文件有没有配错,我这里是因为我按照网上的教程配了两个ip,导致出错了,就是这句

4月 30 14:41:08 Jc-F117-V mongod[2971]: Scalar option 'net.bindIp' must be a single value
提示的我。其他错误最好先认真查看这个错误信息,或在查看日志。很多时候和有提供的帮助解决的信息,要学会查看这些信息。

13、最后这些所有的错误都解决了。再运行test,就没有任何问题了(记得启动mongod服务)
运行test出现以下正确信息:
{ "ismaster" : true, "maxBsonObjectSize" : 16777216, "maxMessageSizeBytes" : 48000000, "maxWriteBatchSize" : 100000, "localTime" : { "$date" : 1588229112171 }, "logicalSessionTimeoutMinutes" : 30, "connectionId" : 2, "minWireVersion" : 0, "maxWireVersion" : 8, "readOnly" : false, "ok" : 1.0 }

好的,大功告成了。
这里的mongo-cxx-driver出现的部分问题主要参考了该文章:
https://www.cnblogs.com/pluse/p/5491300.html
 

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Soul painter丶

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值