源碼位置:需要從官網下載,下載地址:https://dev.mysql.com/downloads/connector/cpp/
因爲沒有arm平臺linux7的源碼,所以選擇最後一個通用的linux版本
mysql c++ connector依賴: boost_1_69_0,openssl, mysql c connector
注 :所用boost源碼來自boost https://dl.bintray.com/boostorg/release/1.69.0/source/
openssl源碼來自 網絡
mysql c connector源碼來自 https://dev.mysql.com/downloads/mysql/ 使用第一個tar.gz包即可,如下圖
安裝過程:
- 安裝依賴庫 boost__69_0 openssl
- 安裝mysql c connector 創建build目錄
-
cmake .. \ -DWITH_BOOST=/home/leq/tools/thirdparty/boost_1_69_0 \ -DCMAKE_C_COMPILER=/home/leq/tools/install/GCC-7.2.0/bin/gcc \ -DCMAKE_CXX_COMPILER=/home/leq/tools/install/GCC-7.2.0/bin/g++ \ -DWITH_SSL=/home/leq/tools/install/openssl \ -DHAVE_IB_GCC_ATOMIC_COMPARE_EXCHANGE=1 \ -DIGNORE_AIO_CHECK=1 \ -DHAVE_IB_ATOMIC_PTHREAD_T_GCC=1 \ -DHAVE_GCC_SYNC_BUILTINS=1 \ -DCURSES_LIBRARY=/home/leq/tools/install/ncurse/usr/lib/libncurses.so \ -DCURSES_INCLUDE_PATH=/home/leq/tools/install/ncurse/usr/include \ -DCMAKE_INSTALL_PREFIX=/home/leq/tools/install/mysql_c_connector
2.
make –j && make install
-
碰到的問題 問題1
安裝ncurses-devel
下載地址 : http://ftp.gnu.org/gnu/ncurses/ ncurses-6.1.tar.gz
tar xvf ncurses-6.1.tar.gz
cd ncurses-6.1
./configure --with-shared --without-debug --without-ada --enable-overwrite --with-install-prefix=${HOME}/tools/install/ncurse
make –j
make install
問題2
export LD_LIBRARY_PATH=/home/leq/tools/install/GCC-7.2.0/lib64 :$LD_LIBRARY_PATH
- 安裝 c++ connector 創建build目錄
-
cmake .. \ -DCMAKE_C_COMPILER=/home/leq/tools/install/GCC-7.2.0/bin/gcc \ -DCMAKE_CXX_COMPILER=/home/leq/tools/install/GCC-7.2.0/bin/g++ \ -DWITH_SSL=/home/leq/tools/install/openssl \ -DWITH_JDBC=ON \ -DMYSQL_DIR=/home/leq/tools/install/mysql_c_connector \ -DWITH_BOOST=/home/leq/tools/thirdparty/boost_1_69_0 \ -DCMAKE_INSTALL_PREFIX=/home/leq/tools/install/mysql_c++_connector \ -DCMAKE_BUILD_TYPE=Release
2.
make -j && make install
-
安裝三個安裝的順序按照 1 2 3的順序,因爲有依賴關係,所以安裝順序不可打亂
測試demo:三個文件 :build.sh CMakeLists.txt test_mysql.sh
build.sh:
#!/bin/bash
export CC=/home/leq/tools/install/GCC-7.2.0/bin/gcc
export CXX=/home/leq/tools/install/GCC-7.2.0/bin/g++
export LD_LIBRARY_PATH=/home/leq/tools/install/GCC-7.2.0/lib64:$LD_LIBRARY_PATH
if [ ! -d ./build ]
then
mkdir build
fi
cd build
cmake ..
make
./test_mysql
test_mysql.cpp
#include <stdlib.h>
#include <iostream>
#include <mysql_driver.h>
#include <mysql_connection.h>
#include <cppconn/resultset.h>
#include <cppconn/statement.h>
using namespace std;
int main(void)
{
cout << "Running 'SELECT 'Hello World!' AS _message'..." << endl;
try
{
sql::Driver *driver;
sql::Connection *con;
sql::Statement *stmt;
sql::ResultSet *res;
/* 連接mysql服務器 */
driver = get_driver_instance();
con = driver->connect("tcp://172.16.12.xxx:xxxx", "username", "passwd");
con->setSchema("schema");
stmt = con->createStatement();
res = stmt->executeQuery("SELECT 'Hello World!' AS colu");
while (res->next()) {
//通過列別名訪問
cout << res->getString("colu") << endl;
//通過列偏移
cout << res->getString(1) << endl;
}
delete res;
delete stmt;
delete con;
}
catch (sql::SQLException &e)
{
cout << "# ERR: SQLException in " << __FILE__;
cout << "(" << __FUNCTION__ << ") on line " << __LINE__ << endl;
cout << "# ERR: " << e.what();
cout << " (MySQL error code: " << e.getErrorCode();
cout << ", SQLState: " << e.getSQLState() << " )" << endl;
}
cin.get();
return EXIT_SUCCESS;
}
CMakeLists.txt
cmake_minimum_required(VERSION 3.6)
project(demo)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
#set(CMAKE_C_COMPILER "/home/leq/tools/install/GCC-7.2.0/bin/gcc")
#set(CMAKE_CXX_COMPILER "/home/leq/tools/install/GCC-7.2.0/bin/g++")
include_directories(
/home/leq/tools/install/mysql_c++_connector/include/jdbc/cppconn
/home/leq/tools/install/mysql_c++_connector/include/jdbc
/home/leq/tools/thirdparty/boost_1_69_0
)
link_directories(
/home/leq/tools/install/mysql_c++_connector/lib64
/home/leq/tools/install/openssl/lib
)
add_executable(test_mysql test_mysql.cpp) # 生成可執行文件
target_link_libraries(test_mysql libmysqlcppconn.so)
測試結果: