请安官网安装即可:
https://docs.mongodb.com/manual/tutorial/install-mongodb-on-ubuntu/
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
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