linux(ubuntu) 下安裝connector c++ 來連接mysql

 

目錄

1 下載connector c++源碼

2 安裝依賴文件

1. 編譯工具Cmake

2. Mysql的Client Libary

3. boost C++ library

4. openssl 庫

3 編譯

1. 創建build文件夾

2. 進入build文件夾,執行指令

3. 編譯

4. 將編譯後的文件放在正確的位置

4 使用

5. 注意事項


由於在使用c++編寫算法,同時需要連接mysql數據庫,開始時,我直接使用的c api來連接數據庫,發現非常繁瑣,於是開始使用connect c++ 來連接和訪問數據庫。

1 下載connector c++源碼

確實可以直接下載connector c++的庫直接使用,但是不推薦,因爲直接用庫,可能會由於系統原因導致莫名其妙的錯誤,我最開始就是直接下載的ubuntu 18.04的庫,但是由於我的系統是19.10,但是官方並沒有提供19.10的庫,所以被迫使用18.04的庫,剛開始能夠正常使用,但是過了幾天,就突然無法使用,報內存錯誤,特別坑,所以推薦使用源碼,在系統上編譯後,使用。

官網下載地址

如果覺得下載慢,或者想爲我貢獻C幣,可以下載這個:

 

 

如圖,選擇Source Code 以及對應系統。然後下載即可。

2 安裝依賴文件

1. 編譯工具Cmake

需要Cmake3.0以上

2. Mysql的Client Libary

就是mysql的 c api

3. boost C++ library

只有當你需要編譯legacy JDBC才需要boost庫,一般是不需要的,如果需要,得boost 1.59.0版本以上

4. openssl 庫

需要1.0版本以上

#安裝cmake
sudo apt-get install cmake
#安裝mysql,現在是2020年,默認安裝mysql8.0
sudo apt-get install mysql-client mysql-server
#安裝mysql的c api
sudo apt-get install libmysqlclient-dev
# 安裝openssl
sudo apt-get install openssl
# 安裝boost
sudo apt-get install libboost-dev

3 編譯

1. 創建build文件夾

在源碼文件夾內創建一個build文件夾

2. 進入build文件夾,執行指令

cmake   ../    -DCMAKE_BUILD_TYPE=Release  -DWITH_JDBC=true 

3. 編譯

sudo make
sudo make install

4. 將編譯後的文件放在正確的位置

用上述方法編譯,並沒有指定安裝位置,所以會將編譯得到的文件默認放在

/usr/local/mysql

路徑下

進入connnector-c++ ,裏面有

將include文件夾中的jdbc文件夾裏面的所有文件(包括文件夾)複製到 /usr/local/include文件夾中

sudo cp -r include/jdbc/* /usr/local/include/

然後將lib64文件夾中的所有庫,複製到 /usr/lib 目錄下

sudo cp lib64/* /usr/lib/

至此,安裝完畢,可以開始使用。

4 使用

#include <mysql_connection.h>
#include <mysql_driver.h>
#include <cppconn/driver.h>

using namespace sql;
using namespace std;

#define DBHOST "tcp://127.0.0.1:3306"
#define USER "root"
#define PASSWORD "123456"

int main(){

  Driver *driver;
  Connection *conn;
  driver = get_driver_instance();
  conn = driver->connect(DBHOST, USER, PASSWORD);
  cout<<"DataBase connection autocommit mode = "<<conn->getAutoCommit()<<endl;
  delete conn;
  driver = NULL;
  conn = NULL;
  return 0;
}

使用

g++ mysqlconn.cpp -lmysqlcppconn

編譯

 

5. 注意事項

一天後,我又在兩臺雲服務器上進行了安裝,但是中間都遇到了很多坑。一臺是阿里雲,安裝的系統是centos7 所安裝的軟件非常地老舊,cmake只有2.8,需要自己下載源碼,編譯高版本的cmake。centos的安裝命令與ubuntu不同,需要小心。另一臺是天翼雲的雲服務器,使用的是ubuntu1604.這兩臺安裝過程中,都遇到了一個坑,在我完成connector c++的編譯之後,再去編譯我編寫的應用程序時,鏈接的時候報錯:

意思是libmysqlcppconn動態庫中有一個符號未定義,需要依賴其他庫。剛遇到這個錯誤的時候我是茫然無知的,對這個錯誤進行了 大量的搜索,都沒找到有用的信息,搞了一個上午。後來終於找到一個方法:

給編譯器 g++ 加一個選項:

g++ ... -Wl,-allow-shlib-undefined

這個選項的意思是,允許動態庫中有未定義的符號。加了之後,我的就能正常使用了,至於對使用有沒有什麼影響,我暫時沒發現。

最後,需要說一下,同志們,保護好自己的頭髮。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章