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

如何通过CMake为项目链接MariaDB C++连接器库?编译报错求助

解决MariaDB C++连接器CMake链接与头文件问题

问题回顾

  1. 初始报错:找不到mariadb/conncpp.hpp,将set_property改为set_target_properties后解决,但出现新错误:Connection.hpp找不到同级的Properties.hpp。
  2. 环境:Windows下通过MSI安装MariaDB C连接器,CMake版本3.24,使用C23标准。

解决方案

1. 修正头文件包含路径配置

检查连接器安装目录的头文件结构:

C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/include/
└── mariadb/
    └── conncpp/
        ├── Connection.hpp
        ├── Properties.hpp
        └── ...其他头文件

Connection.hpp中用#include "Properties.hpp"引用同级文件,需确保编译器能识别该相对路径。修改CMakeLists.txt中导入库的属性,同时确认路径解析正常(可保留引号包裹带空格的路径):

add_library(mariadbcpp STATIC IMPORTED)
set_target_properties(mariadbcpp PROPERTIES
    IMPORTED_LOCATION "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/mariadbcpp-static.lib"
    INTERFACE_INCLUDE_DIRECTORIES "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/include/"
)

若仍出现同级头文件找不到的问题,可补充添加子目录到包含路径:

target_include_directories(${PROJECT_NAME} PRIVATE 
    "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/include/"
    "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/include/mariadb/conncpp/"
)

2. 链接依赖的MariaDB C客户端库

MariaDB C++连接器静态库依赖MariaDB C客户端库(libmariadb.lib),仅链接mariadbcpp-static.lib会导致依赖缺失问题。导入并链接该库:

# 导入MariaDB C客户端静态库
add_library(mariadbclient STATIC IMPORTED)
set_target_properties(mariadbclient PROPERTIES
    IMPORTED_LOCATION "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/libmariadb.lib"
    INTERFACE_INCLUDE_DIRECTORIES "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/include/"
)

# 同时链接C++连接器和C客户端库
target_link_libraries(${PROJECT_NAME} mariadbcpp mariadbclient)

3. 验证编译架构一致性

确保CMake生成的项目架构(32/64位)与连接器安装版本一致(你安装的是64位,需显式指定生成64位项目):

set(CMAKE_GENERATOR_PLATFORM x64)

完整CMakeLists.txt示例

cmake_minimum_required(VERSION 3.24)
set(PROJECT_NAME chat)
project(${PROJECT_NAME})

set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_CXX_STANDARD 23)
# 确保生成64位项目,匹配连接器版本
set(CMAKE_GENERATOR_PLATFORM x64)

add_executable(${PROJECT_NAME} main.cpp)

# 导入MariaDB C客户端库
add_library(mariadbclient STATIC IMPORTED)
set_target_properties(mariadbclient PROPERTIES
    IMPORTED_LOCATION "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/libmariadb.lib"
    INTERFACE_INCLUDE_DIRECTORIES "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/include/"
)

# 导入MariaDB C++连接器库
add_library(mariadbcpp STATIC IMPORTED)
set_target_properties(mariadbcpp PROPERTIES
    IMPORTED_LOCATION "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/mariadbcpp-static.lib"
    INTERFACE_INCLUDE_DIRECTORIES "C:/Program Files/MariaDB/MariaDB C++ Connector 64-bit/include/"
)

# 链接所有依赖库
target_link_libraries(${PROJECT_NAME} mariadbcpp mariadbclient)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 07:20:06