Debian10 安装 mysql connector c++

从源安装官方文档
从deb安装官方文档

这里记录下从源安装的一些过程 主要都是按照官方文档进行一些记录
下面的版本要求都是从官方文档上看到的 随着版本迭代或有不同要求 建议还是阅读官方文档


  • 条件

    • cmake > 3.0 见这里

    • MySQL Client Library 装了mysql之后默认装了client不需要处理
      如果在 cmake 时使用了 WITH_JDBC 选项 那么需要 MySQL Client Library 不然的话不需要
      MySQL Client Library 一般在安装 mysql 时的时候就已经安装好了 可以 apt list --installed 检查下
      安装 mysql 的文档在这里
      如果想指定 MySQL Client Library 的位置 可以在 cmake 时用 MYSQL_DIR 指定

    • Boost C++ Libraries c++11支持了codecvt_utf8 装的 gcc8 g++8 所以也不需要处理
      仅仅在 build the legacy JDBC API 或者 安装的c++标准库不支持 UTF8 converter(codecvt_utf8) 时才需要
      Boost 需要 1.59.0 或更高 如何安装 boost 参考这里
      可以使用 WITH_BOOST 指定 Boost 路径

    • SSL 需要安装 apt-get install libssl-dev
      cmake 使用 WITH_SSL 选项时才需要 SSL 库 版本OpenSSL 1.0.x 更高
      这个 WITH_SSL 默认值是 system 所以其实是有值的需要 openssl

  • 安装

    • 只支持源外构建 大概目录结构如下
      在这里插入图片描述
    • 执行如下
      如果配置了 WITH_DOC 需要安装doxygen
      apt-get install ./doxygen_1.8.13-10_amd64.deb
      
      然后执行 cmake
      
      sudo cmake ./mysql-connector-cpp -DBUILD_STATIC=ON -DWITH_DOC=ON
      
      如果没有上一步安装 doxygen 则会出现如下 warning 表示不会 build doc 在这里插入图片描述 cmake 成功的截图如下 可以看到默认安装路径是/usr/local/mysql/connector-c++-8.0在这里插入图片描述
    • sudo cmake --build . --config Debug
      build 成功之后可以在 build 目录找到对应的文件 我们这里的是
      在这里插入图片描述 在这里插入图片描述
    • sudo cmake --build . --target install --config Debug
      动态链接库的使用会比静态链接库的使用稍微简单一些
      动态库使用
      g++ -std=c++11 -I .../include -L .../lib64 app.cc -lmysqlcppconn -o app
      静态库使用
      g++ -std=c++11 -I .../include app.cc .../lib64/libmysqlcppconn8-static.a -lssl -lcrypto -lpthread -o app
      
  • 测试结果

#include <iostream>
#include <vector>
#include <mysqlx/xdevapi.h>

using namespace mysqlx;

int main(int argc, char *argv[])
{
    auto user = argv[1];
    auto password = argv[2];
    std::cout << "Hello World !" << std::endl;
    Session sess("127.0.0.1", 33060, user, password);
    Schema db = sess.getSchema("test", true);

    
    std::vector<Schema> dbv = sess.getSchemas();
    for (std::vector<Schema>::iterator iter = dbv.begin(); iter != dbv.end(); ++iter) {
        std::cout << "All - " << iter->getName() << std::endl;
    }
    std::cout << db.getName() << std::endl;
   
    return 1;
}

g++ -std=c++11 -I /usr/local/mysql/connector-c++-8.0/include/ ./test.cpp /usr/local/mysql/connector-c++-8.0/lib64/debug/libmysqlcppconn8-static.a -lssl -lcrypto -lpthread -o test

运行结果如下
在这里插入图片描述


  • 一些参数解释
    在这里插入图片描述
    -DBUILD_STATIC=bool默认OFF 是否编译为静态库

    -DBUNDLE_DEPENDENCIES=bool默认OFF 是一个内部选项
    用于在创建 connector/c++ package 时是否将外部依赖项和链接器绑定

    -DCMAKE_BUILD_TYPE=type默认Debug

    -DCMAKE_INSTALL_DOCDIR=dir_name文档安装位置
    需要开启 WITH_DOC 选项
    dir_name 是与 CMAKE_INSTALL_PREFIX 的相对位置
    不指定默认是 CMAKE_INSTALL_PREFIX 的位置

    -DCMAKE_INSTALL_INCLUDEDIR=dir_name头文件位置
    dir_name 是与 CMAKE_INSTALL_PREFIX 的相对位置
    不指定默认是 include 的位置

    -DCMAKE_INSTALL_LIBDIR=dir_namelib位置
    dir_name 是与 CMAKE_INSTALL_PREFIX 的相对位置
    不指定默认是 lib64 或者 lib 的位置

    -DCMAKE_INSTALL_PREFIX=dir_name
    connector/c++ 安装位置 默认/usr/local

    -DMAINTAINER_MODE=bool默认OFF
    是一个内部选项
    用于在创建 connector/c++ package 其实不知道什么用哈哈

    仅开启 WITH_JDBC 才有效的设置 -------------------- begin

    -DMYSQLCLIENT_STATIC_BINDING=bool默认ON
    只有当下面的 DMYSQLCLIENT_STATIC_LINKING 值是OFF时才会生效
    如果是ON 表示可以动态链接到mysql客户端库
    如果是OFF mysql客户端库会在运行时加载和映射

    -DMYSQLCLIENT_STATIC_LINKING=bool默认ON
    是否静态链接到mysql客户端库
    如果是OFF 可以用跟上面的 DMYSQLCLIENT_STATIC_BINDING 进行动态链接

    -DMYSQL_CONFIG_EXECUTABLE=file_name
    mysql_config program 的路径
    默认${MYSQL_DIR}/bin/mysql_config
    如果不设置这个值 会到默认路径寻找

    -DMYSQL_DIR=dir_name
    MySQL Server 安装路径

    仅开启 WITH_JDBC 才有效的设置 ---------------------- end

    -DSTATIC_MSVCRT=bool
    只在 windows 生效
    是否使用静态运行时库( /MT* 选项)
    如果代码有使用静态运行时库 那么这个选项是必须的

    -DWITH_BOOST=dir_name
    boost安装位置

    -DWITH_DOC=bool默认OFF
    是否生成文档

    -DWITH_JDBC=bool默认OFF
    是否开启 legacy JDBC connector 功能

    -DWITH_SSL={ssl_type|path_name}默认值 system
    指定在编译时使用哪种 ssl 库 可以指定 type 名字 或者 path 表示 ssl 路径

发布了40 篇原创文章 · 获赞 0 · 访问量 2585

猜你喜欢

转载自blog.csdn.net/u010571102/article/details/103444229