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

Windows下MySQL Connector C++ 8.0编译出现undefined reference to `check`错误

连接MySQL Connector C++ 8.0时的链接错误解决

问题场景

尝试用MySQL Connector C++ 8.0连接C++程序与数据库,编译以下代码时出现链接错误:

#include <iostream>
#include <jdbc.h>

int main(){
    sql::Driver *driver;
    driver = get_driver_instance();
    
    return 0;
}

错误信息

c:/program files (x86)/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\newva\AppData\Local\Temp\ccjFB5x8.o:Main.cpp:(.text+0x1f): undefined reference to `check(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)'
c:/program files (x86)/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users\newva\AppData\Local\Temp\ccjFB5x8.o:Main.cpp:(.text+0x53): undefined reference to `check(std::map<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::less<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > const&)'
collect2.exe: error: ld returned 1 exit status

注释掉driver = get_driver_instance();后程序可正常编译,使用的Makefile配置如下:

MYSQL_CONCPP_DIR = "C:\\Program Files\\MySQL\\Connector C++ 8.0"
CPPFLAGS=-I $(MYSQL_CONCPP_DIR)\\include\\mysql -L $(MYSQL_CONCPP_DIR)\\lib64\\vs14
LDLIBS=-lmysqlcppconn
CXXFLAGS=-std=c++20

result.exe:Main.cpp
    g++ Main.cpp ${CXXFLAGS} ${CPPFLAGS} ${LDLIBS} -o result.exe

操作系统:Windows 10

解决方案

1. 解决编译器兼容性问题

你当前使用MinGW(GCC)编译代码,但链接的是VS14(MSVC)编译的库文件,二者C++标准库实现(如std::__cxx11字符串)不兼容,导致符号无法匹配。

  • 前往MySQL官网下载MinGW架构的Connector C++ 8.0安装包,替换当前的VS版本库文件。
  • 修改Makefile中的库路径,将lib64\\vs14改为MinGW版本库所在路径(例如lib64\\mingw,具体以下载的包结构为准)。

2. 调整链接顺序与参数

GCC要求库文件放在源文件之后,确保链接顺序正确;同时可强制链接标准库:
修改Makefile的编译命令为:

g++ Main.cpp ${CXXFLAGS} ${CPPFLAGS} -o result.exe ${LDLIBS}

或在LDLIBS中添加标准库链接:

LDLIBS=-lmysqlcppconn -lstdc++

3. 添加适配宏定义

如果使用动态库,在CXXFLAGS中添加适配GCC的宏:

CXXFLAGS=-std=c++20 -DMYSQLCPPCONN_DYNAMIC_LINK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 09:02:53