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

C++连接MySQL数据库遇未定义引用错误:undefined reference to `check(std::map...)`

MySQL Connector C++ 链接错误:未定义check函数引用

问题详情

已成功引入MySQL Connector C++ 9.0的头文件,但编译时触发链接错误:

C:\Program Files\JetBrains\CLion 2023.3.2\bin\mingw\bin/ld.exe: C:/Program Files/MySQL/MySQL Connector C++ 9.0/include/jdbc/cppconn/driver.h:86: undefined reference to `check(std::map<std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::__cxx11::basic_string<char, std::char_traits, std::allocator >, std::less<std::__cxx11::basic_string<char, std::char_traits, std::allocator > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits, std::allocator > const, std::__cxx11::basic_string<char, std::char_traits, std::allocator > > > > const&)' collect2.exe: error: ld returned 1 exit status ninja: build stopped: subcommand failed.

报错翻译:未定义对check(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, ...>>)的引用

错误指向driver.h中的代码段:

inline static void check_lib() { check(std::string{}); check(std::map<std::string,std::string>{}); }

使用的测试代码main.cpp:

#include <stdlib.h> 
#include <iostream> 
#include <mysql_connection.h> 
#include <driver.h> 
#include <exception.h> 
#include <resultset.h> 
#include <statement.h>
using namespace sql; 

int main(void){ 
    sql::Driver *driver; 
    sql::Connection *con; 
    driver = get_driver_instance(); 
    con = driver->connect("tcp://127.0.0.1:3306","root","pass"); 
    return 0; 
}

解决方案

这个错误的核心是链接阶段未正确关联MySQL Connector C++的库文件——头文件仅提供函数声明,链接器需要找到包含函数实现的库文件才能完成编译。

  • 确认Connector C++版本与MinGW编译器的架构匹配(32位/64位必须一致)
  • 在CLion的CMakeLists.txt中添加库链接配置:
    1. 指定头文件路径:include_directories("C:/Program Files/MySQL/MySQL Connector C++ 9.0/include/jdbc")
    2. 指定库文件路径:link_directories("C:/Program Files/MySQL/MySQL Connector C++ 9.0/lib64")(32位环境替换为lib)
    3. 添加库链接指令:target_link_libraries(你的项目名 mysqlcppconn)(Connector C++ 8.0+版本通常使用mysqlcppconn,部分版本可能需要mysqlcppconn8)

示例CMakeLists.txt:

cmake_minimum_required(VERSION 3.27)
project(your_project_name)

set(CMAKE_CXX_STANDARD 17)

# 引入头文件
include_directories("C:/Program Files/MySQL/MySQL Connector C++ 9.0/include/jdbc")
# 指定库路径
link_directories("C:/Program Files/MySQL/MySQL Connector C++ 9.0/lib64")

add_executable(your_project_name main.cpp)
# 链接MySQL库
target_link_libraries(your_project_name mysqlcppconn)
  • 若使用动态库,需将Connector C++目录下的mysqlcppconn.dll复制到项目可执行文件所在目录,或把库路径添加到系统PATH环境变量中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:04:57