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

Win11下g++编译C++连接MySQL报undefined reference错误

C++连接MySQL出现undefined reference报错解决(Windows 11环境)

报错信息

编译时抛出如下链接错误:

undefined reference to `mysql_init'
undefined reference to `mysql_real_connect'

问题复现代码

#include <iostream>
#include <windows.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "mysql.h"

int main(){
    MYSQL* conn;
    MYSQL_ROW row;
    MYSQL_RES * res;
    
    conn = mysql_init(0);
    conn = mysql_real_connect(conn, "localhost", "root", "", "cpp", 0, NULL, 0);
    if(conn){
        std::cout << "Connected to database successfully";
    } else {
        std::cout << "Connection failed...";
        exit(0);
    }

    return 0;
}

原有编译命令

g++ main.cpp

报错根本原因

undefined reference属于链接阶段错误,和头文件无关:头文件仅提供函数声明,你虽然把mysql.h放到了代码同目录,但编译时没有链接MySQL客户端对应的实现库,链接器找不到mysql_init、mysql_real_connect的具体实现,所以报错。

分步解决方法

  • 先确认架构匹配:检查你使用的g++是32位还是64位版本,必须和本地安装的MySQL Server架构完全一致,混架构会直接链接失败。
  • 替换编译命令,指定头文件、库路径并链接依赖库:默认MySQL 8.0的安装路径为C:\Program Files\MySQL\MySQL Server 8.0,如果你的安装路径不同,自行替换命令里的路径即可:
g++ main.cpp -o main.exe -I"C:\Program Files\MySQL\MySQL Server 8.0\include" -L"C:\Program Files\MySQL\MySQL Server 8.0\lib" -lmysqlclient

参数说明:

  • -I:指定MySQL头文件所在的include目录路径
  • -L:指定MySQL库文件所在的lib目录路径
  • -lmysqlclient:告知链接器需要链接mysqlclient库
  • 如果执行上面命令仍报错,是因为MinGW的g++无法直接识别MySQL自带的MSVC格式.lib库,需要手动生成MinGW兼容的导入库:
    1. 打开MinGW对应的终端,进入MySQL安装目录下的lib文件夹
    2. 执行命令生成适配的.a库:dlltool -d libmysql.lib -l libmysqlclient.a
    3. 生成的libmysqlclient.a可以留在原lib目录,也可以复制到代码目录,重新执行上面的编译命令即可
  • 编译通过后,把MySQL lib目录下的libmysql.dll复制到生成的main.exe同目录,否则运行时会抛出找不到动态库的错误。

优化建议

  • 头文件引入方式从#include "mysql.h"改为#include <mysql.h>,配合-I参数指定头文件路径,避免优先加载同目录下版本不匹配的头文件。
  • 如果你使用的是MySQL 5.x版本,库名对应为libmysql.lib,把编译命令里的-lmysqlclient替换为-llibmysql即可,其余步骤一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:42:24