編寫簡單的鏈接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吧。

相關文章
相關標籤/搜索