编写简单的链接MongoDB数据库C++程序 && 解决编译C++程序时连接MongoDB动态...

编写简单的链接MongoDB数据库C++程序 && 解决编译C++程序时连接MongoDB动态库失败的问题。ios

一. 安装好mongo数据库之后,建立一个用来连接数据库的简单C++程序mon2.cpp,发现不少网站都用这个程序作示例。数据库

不太重点在于如何让这个程序真正能够跑起来显示出来结果,着实费了一番功夫。网站

 1 #include <iostream> 2 #include "client/dbclient.h"  3  4 using namespace mongo; 5 using namespace std; 6 void run() { 7     DBClientConnection c; 8     c.connect("localhost"); 9 }10 11 int main() {12     try {13         run();14         cout << "connected ok" << endl;15     } catch( DBException &e ) {16         cout << "caught " << e.what() << endl;17     }18     return ;19 }

在终端输入“g++ mon2.cpp -I /usr/include/mongo/ /usr/lib/libmongoclient.a -lboost_thread -lboost_filesystem -lboost_program_options”进行编译C++程序。spa

”-lboost_thread -lboost_filesystem -lboost_program_options“这三个是编译关于mongo的C++程序须要用到的动态库,问题每每出如今这里,涉及到数据库的程序编译不经过,八成是找不到对应的动态库文件。code

常见的错误以下图所示:blog

二. 解决编译C++程序时连接mongo的动态库失败的问题io

最简单的解决办法:编译

root用户下,首先进入mongo的库目录(个人路径是"/usr/lib"),而后在终端输入"ls -al | grep libboost"查找相应的动态连接库文件,若是找不到以".so"结尾文件,则拷贝("cp 源文件 目标文件")下面显示的七个动态库到当前目录,而且命名为"xxx.so" ,或者建立这七个动态库的软连接到固然目录(会在下面提到)。table

而后修改"/etc/ld.so.conf"文件,增长一行刚才存放.so文件的目录的地址,以下图则增长一行"/usr/lib"class

保存完之后,运行"ldconfig"命令使配置生效。

下面再说下我在解决问题遇到的几种特殊的状况。

--------------------------------------------------

第一种状况:只要生成xxx.so文件与原来自带的动态库文件在同一个目录下面(不在同一个目录下面的软连接不起做用,具体见第三种状况),那么除了上面说到的拷贝方法生成.so文件,也能够经过建立软连接(ln -s 源文件 目标文件也能够达到目标,生成完之后经过"ls -al | grep libboost"查看生成软连接。 

第二种状况:若是仅仅是进行了复制或者建立软连接到当前目录,而没有修改"/etc/ld.so.conf"文件,则可能会碰到下面的错误。

第三种状况:若是不在同一个目录的话,好比动态库文件在"/usr/lib"下面,想要生成的"xxx.so"文件存放在"/usr/local/lib"下面的状况。

(1)注意一:不能用软连接的方法,只能经过拷贝的办法来实现。建立的软连接与原本的动态库文件要是不在一个目录,编译依然会报错,即便编译的时候经过“-L”指定动态库所在的文件夹也不会起做用,以下图

 

注意:这里软连接虽然没用,可是当要建立的软连接与源文件不在同一目录时,建立软连接必定要用绝对路径,使用相对路径名会形成没必要要的错误。

(2)注意二:经过拷贝的办法来实现第三种状况,用拷贝“cp"命令将动态库文件以".so"结尾拷贝到"/usr/local/lib"下面.

查看拷贝到"/usr/local/lib"中的.so"文件

而后修改相应的"/etc/ld.so.conf"文件,在终端输入"ldconfig"使配置生效。

而后编译,编译经过之后,会发现系统会自动在“/usr/local/lib"下面建立关于".so"文件的软连接(缘由不详)。

编译经过,会在”/usr/local/lib“文件夹中自动生成了软连接,连接到".so"文件。

下面就来运行下生成的a.out吧。

相关文章
相关标签/搜索