You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用CMake构建mysql-connector-cpp项目时遇到编译错误

CMake构建依赖mysql-connector-cpp项目的头文件缺失问题解决

项目背景

本地构建依赖mysql-connector-cpp的CMake项目,最初因版本问题出现配置文件缺失、CPack资源找不到等错误,更新至8.1.0版本(兼容1.1版本)后,将头文件引用改为jdbc/前缀,出现编译时找不到头文件的错误。

项目文件结构

src/
├─ app/
├─ common/
├─ core/
├─ CMakeLists.txt
ThirdParty/
├─ mysql-connector-cpp/
├─ CMakeLists.txt
CMakeLists.txt

各目录CMake配置代码

根目录CMakeLists.txt

cmake_minimum_required (VERSION 3.5)

if(NOT CMAKE_BUILD_TYPE)
    set(CMAKE_BUILD_TYPE Release)
endif(NOT CMAKE_BUILD_TYPE)

if(CMAKE_BUILD_TYPE MATCHES Debug)
  message("Debug build.")
elseif(CMAKE_BUILD_TYPE MATCHES Release)
  message("Release build.")
endif()

set(application_name "my_project")
set(CMAKE_CXX_STANDARD 17)

cmake_policy(SET CMP0048 NEW)

set(application_version "1.0.2")
set(PROJECT_VER ${application_version})
set(WITH_JDBC ON)

project (${application_name} LANGUAGES C CXX)

add_subdirectory(ThirdParty)
add_subdirectory(src)

ThirdParty目录CMakeLists.txt

add_subdirectory(mysql-connector-cpp)

src目录CMakeLists.txt

add_subdirectory(app)
add_subdirectory(common)
add_subdirectory(core)

src/core目录CMakeLists.txt

set(source
    src/my_message.cpp
)

add_library(core ${source})

target_link_libraries(core PUBLIC common)
target_link_libraries(core PUBLIC mysql-connector-cpp)

target_include_directories(core PUBLIC inc)
target_include_directories(core PRIVATE inc/core)

编译错误信息

In file included from /home/username/workspace/my_project/src/core/src/my_message.cpp:13:
/home/username/workspace/my_project/src/core/inc/core/my_message.h:19:10: fatal error: jdbc/driver/mysql_connection.h: No such file or directory
 #include "jdbc/driver/mysql_connection.h"
          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
gmake[2]: *** [src/core/CMakeFiles/core.dir/build.make:76: src/core/CMakeFiles/core.dir/src/my_message.cpp.o] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:1418: src/core/CMakeFiles/core.dir/all] Error 2
gmake: *** [Makefile:136: all] Error 2

解决方法

原因分析

尽管已经链接了mysql-connector-cpp库,但CMake未自动将连接器的头文件目录添加到core库的编译包含路径中,或者连接器的CMake配置未正确导出头文件路径。

具体修复方案

方案1:直接添加头文件路径到core库

修改src/core/CMakeLists.txt,在target_include_directories部分添加mysql-connector-cpp的头文件目录:

target_include_directories(core 
    PUBLIC 
        inc 
        ${CMAKE_CURRENT_SOURCE_DIR}/../../ThirdParty/mysql-connector-cpp/include
    PRIVATE 
        inc/core
)

方案2:使用正确的连接器CMake目标

mysql-connector-cpp 8.1.0版本的CMake目标名称可能是mysqlcppconn8,替换target_link_libraries中的目标:

target_link_libraries(core PUBLIC common mysqlcppconn8)

该目标会自动关联对应的头文件路径,无需手动添加。

方案3:确保WITH_JDBC选项传递生效

在ThirdParty/CMakeLists.txt中强制设置WITH_JDBC选项,确保连接器构建时启用JDBC模块:

set(WITH_JDBC ON CACHE BOOL "Build JDBC driver" FORCE)
add_subdirectory(mysql-connector-cpp)

此操作会保证JDBC相关头文件被正确编译和导出。

内容的提问来源于stack exchange,提问作者cinargursoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 17:55:54