这里记录下从源安装的一些过程 主要都是按照官方文档进行一些记录
下面的版本要求都是从官方文档上看到的 随着版本迭代或有不同要求 建议还是阅读官方文档
-
条件
-
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
然后执行 cmakeapt-get install ./doxygen_1.8.13-10_amd64.deb
如果没有上一步安装 doxygen 则会出现如下 warning 表示不会 build doc cmake 成功的截图如下 可以看到默认安装路径是sudo cmake ./mysql-connector-cpp -DBUILD_STATIC=ON -DWITH_DOC=ON
/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_name
lib位置
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 路径