CMake配置MySQL Connector/C++8.0 JDBC找不到MySQL Client报错求助
报错根因
- Ubuntu 源里的
mysql-client包仅包含mysql命令行等运行时工具,不提供编译依赖的头文件、链接库开发文件,这是触发该报错的最常见原因。 - MySQL Connector/C++ 8.0.29 的legacy JDBC模块强依赖libmysqlclient C客户端库作为底层通信实现,其自带的
DepFindMySQL.cmake查找逻辑未适配Ubuntu的multiarch目录规范,即便安装了开发依赖也可能出现路径探测失败。 - 版本兼容无需担心:8.0.x系列的Connector/C++ legacy API可正常对接5.7版本的libmysqlclient,不存在版本不匹配问题,无需升级系统自带的MySQL客户端。
解决步骤
- 先安装缺失的编译依赖:
sudo apt update sudo apt install -y libmysqlclient-dev
安装完成后执行以下命令校验文件是否就位,正常情况下会输出对应文件路径:
# 校验头文件 ls /usr/include/mysql/mysql.h # 校验动态库 ls /usr/lib/x86_64-linux-gnu/libmysqlclient.so
如果是ARM架构设备,将路径中的x86_64-linux-gnu替换为aarch64-linux-gnu即可。
- 回滚你之前对
other/mysql/CMakeLists.txt的修改,直接在项目自身的CMakeLists.txt中管控子模块配置,避免后续升级子模块时配置丢失。在add_subdirectory(other/mysql)语句之前添加如下配置:
# 开启legacy JDBC编译 set(WITH_JDBC ON CACHE BOOL "Build legacy JDBC API" FORCE) # 显式指定libmysqlclient路径,跳过自动探测逻辑 set(WITH_MYSQL "/usr" CACHE PATH "MySQL client install prefix" FORCE) set(MYSQL_INCLUDE_DIR "/usr/include/mysql" CACHE PATH "MySQL client headers path" FORCE) set(MYSQL_LIB_DIR "/usr/lib/x86_64-linux-gnu" CACHE PATH "MySQL client library path" FORCE)
- 清理历史CMake缓存后重新配置:直接删除项目的build目录,重新执行CMake配置流程即可,原有报错会消失。
编译校验
配置完成后可确认编译目标:legacy JDBC对应的动态库目标为mysqlcppconn,新版X DevAPI对应的动态库目标为mysqlcppconn8,两个目标均正常生成即代表配置正确。
内容的提问来源于stack exchange,提问作者Anime.pdf
相关产品推荐
相关产品推荐

