c++ cmake操作mysql

在mysql源码文件夹下创建MySQLConfig.cmake文件

set(MySQL_INCLUDE_DIRS /opt/mysql/include)
file(GLOB MySQL_LIBS /opt/mysql/lib/lib*.so)

CMakeLists.txt:

cmake_minimum_required(VERSION 3.0)		# CMake最低版本要求,低于2.6的构建过程会被终止set(CMAKE_CXX_STANDARD 14)		#opencv4以上加此句
set(CMAKE_CXX_STANDARD  14)
project(mysql_test)				# 定义工程名称
find_package(MySQL      REQUIRED)
include_directories(
                    ${MySQL_INCLUDE_DIRS}
                    )
add_executable(mysql_test src/main.cpp)	# 生成一个叫 cmake_test的可执行文件,其中可执行源文件路径为 src/main.cpp
target_link_libraries( cmake_test 
                        ${MySQL_LIBS}) # 链接库

main.cpp

#include <mysql/mysql.h>
#include <iostream>

int main() {
    // 初始化MySQL连接
    MYSQL mysql;
    mysql_init(&mysql);

    // 连接到MySQL服务器
    if (!mysql_real_connect(&mysql, "localhost", "root", "passwd", "sys", 0, "/home/.mysql/run/mysql.sock", 0)) 
    {
        std::cerr << "Failed to connect to database: " << mysql_error(&mysql) << std::endl;
        return 1;
    }

    // 执行查询
    if (mysql_query(&mysql, "SELECT * FROM sys_config")) 
    {
        std::cerr << "Failed to execute query: " << mysql_error(&mysql) << std::endl;
        return 1;
    }

    // 获取查询结果
    MYSQL_RES* result = mysql_store_result(&mysql);
    if (result == NULL) 
    {
        std::cerr << "Failed to get result: " << mysql_error(&mysql) << std::endl;
        return 1;
    }

    // 获取结果集中的列数
    int num_fields = mysql_num_fields(result);

    // 打印结果
    MYSQL_ROW row;
    while ((row = mysql_fetch_row(result))) 
    {
        for (int i = 0; i < num_fields; ++i) 
        {
            std::cout << row[i] << " ";
        }
        std::cout << std::endl;
    }

    // 释放结果集
    mysql_free_result(result);

    // 关闭MySQL连接
    mysql_close(&mysql);

    return 0;
}
<think>好的,我现在需要帮助用户在Ubuntu上配置MySQL Connector/C++CMake的集成。首先,我需要回忆一下相关的步骤,确保自己了解整个过程。 首先,用户可能需要安装MySQL Connector/C++。在Ubuntu上,通常可以通过apt包管理器来安装。我记得包名可能是libmysqlcppconn-dev,这样安装的话,头文件和库文件会被放在系统的默认路径,比如/usr/include/mysql和/usr/lib/x86_64-linux-gnu。不过有时候用户可能需要手动下载源码编译安装,特别是如果需要特定版本的话。这时候可能需要使用cmake和make来构建。这时候要注意依赖项,比如需要安装libmysqlclient-dev,否则编译时可能会出错。 接下来,用户需要用CMake来配置项目。这时候需要确保CMake能找到MySQL Connector/C++的头文件和库文件。用户可能需要使用find_package命令,或者手动设置包含路径和链接库。如果通过apt安装的话,可能find_package能够自动找到,但如果是手动安装到非标准路径,就需要在CMakeLists.txt中指定INCLUDE_DIRECTORIES和LINK_DIRECTORIES,或者在调用cmake添加参数,比如-DCMAKE_PREFIX_PATH=/path/to/mysql-connector。 然后,用户的代码中需要包含正确的头文件,比如#include <mysql_driver.h>,并且在链接阶段链接mysqlcppconn库。在CMake中,使用target_link_libraries(target_name mysqlcppconn)应该就可以。但需要注意库的名称是否正确,有时候可能会有版本号或者其他后缀,可能需要用find_library来定位。 另外,用户可能会遇到运行时找不到库的问题。这时候需要确保动态库路径正确,可以通过设置LD_LIBRARY_PATH环境变量,或者将库路径添加到/etc/ld.so.conf中,并运行ldconfig更新缓存。比如,如果手动安装到了/usr/local/lib,可能需要执行sudo ldconfig。 还有,用户可能需要处理MySQL服务器的连接参数,比如主机地址、端口、用户名、密码等。在代码中使用正确的连接字符串,比如jdbc:mysql://localhost:3306/db_name,并且确保MySQL服务正在运行,用户有访问权限。 在参考用户提供的引用内容时,注意到引用[2]提到将/local/bin加入PATH,以及将/local/include和/local/lib加入编译器的搜索路径。这可能适用于用户手动安装MySQL Connector/C++到自定义目录的情况,比如/usr/local。这时候用户需要在CMake中设置include_directories和link_directories指向这些路径,或者在CMake命令中传递相关参数。 此外,引用[1]中的配置命令可能涉及生成动态库,但用户的问题是关于C++连接器的,可能不需要自己编译Python库。不过,这里可能需要确保MySQL Connector/C++的动态库被正确生成和安装,比如libmysqlcppconn.so是否存在。 最后,测试示例代码是否能正确编译和运行是关键。用户可能会忽略某些步骤,比如忘记安装依赖库,或者路径设置不正确,导致编译失败或运行时错误。需要提醒用户按照步骤逐一检查,确保每个环节都正确配置。</think>在Ubuntu系统中配置MySQL Connector/C++CMake的集成,需遵循以下步骤: --- ### 1. 安装依赖库 首先安装MySQL客户端库和开发工具: ```bash sudo apt update sudo apt install libmysqlclient-dev cmake g++ ``` --- ### 2. 安装MySQL Connector/C++ **方法一:APT安装(推荐)** ```bash sudo apt install libmysqlcppconn-dev ``` 安装后头文件路径为`/usr/include/mysql-cppconn-8`,库文件路径为`/usr/lib/x86_64-linux-gnu`[^2]。 **方法二:源码编译安装** ```bash wget https://dev.mysql.com/get/Downloads/Connector-C++/mysql-connector-c++-8.0.30-linux-glibc2.12-x86-64bit.tar.gz tar -xzvf mysql-connector-c++-8.0.30-linux-glibc2.12-x86-64bit.tar.gz sudo cp -r mysql-connector-c++-8.0.30-linux-glibc2.12-x86-64bit/include/* /usr/local/include/ sudo cp -r mysql-connector-c++-8.0.30-linux-glibc2.12-x86-64bit/lib64/* /usr/local/lib/ sudo ldconfig # 更新动态库缓存 ``` --- ### 3. 配置CMake项目 创建`CMakeLists.txt`文件,添加以下内容: ```cmake cmake_minimum_required(VERSION 3.10) project(MySQLDemo) # 设置C++标准 set(CMAKE_CXX_STANDARD 17) # 查找MySQL Connector/C++ find_package(MySQL REQUIRED COMPONENTS CONNECTOR_CPP) # 添加可执行文件 add_executable(demo main.cpp) # 包含头文件路径 target_include_directories(demo PRIVATE ${MYSQL_INCLUDE_DIRS}) # 链接库文件 target_link_libraries(demo PRIVATE ${MYSQL_LIBRARIES}) ``` --- ### 4. 编写示例代码(main.cpp) ```cpp #include <mysqlx/xdevapi.h> #include <iostream> int main() { try { mysqlx::Session sess("localhost", 3306, "user", "password"); mysqlx::Schema db = sess.getSchema("test_db"); std::cout << "成功连接MySQL服务器!" << std::endl; } catch (const mysqlx::Error &e) { std::cerr << "错误: " << e.what() << std::endl; } return 0; } ``` --- ### 5. 编译与运行 ```bash mkdir build && cd build cmake .. make ./demo ``` --- ### 常见问题解决 1. **头文件找不到** 确保`find_package`正确找到路径,或手动指定: ```cmake include_directories(/usr/local/include/mysql-connector-c++-8.0.30) link_directories(/usr/local/lib) ``` 2. **运行时库缺失** 设置动态库路径: ```bash export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH ``` 3. **连接失败** 检查MySQL服务状态和用户权限: ```bash sudo systemctl status mysql mysql -u user -p # 验证账号能否登录 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值