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

Windows10下使用C语言连接MariaDB编译时遇链接错误求助

问题:链接MariaDB库时出现未定义引用错误

环境信息

  • Windows版本:10
  • GCC版本:6.3.0
  • MariaDB版本:10.9
  • Visual Code已安装C/C++扩展

代码

#include <stdlib.h>
#include <windows.h>
#include "C:\Program Files\MariaDB 10.9\include\mysql\server\mysql.h"

int main(int argc, char** argv)
{
    MYSQL* con = mysql_init(NULL);

    if (con == NULL)
    {
        fprintf(stderr, "%s\n", mysql_error(con));
        exit(1);
    }

    if (mysql_real_connect(con, "localhost", "USERNAME", "PASSWD",
        NULL, 0, NULL, 0) == NULL)
    {
        fprintf(stderr, "%s\n", mysql_error(con));
        mysql_close(con);
        exit(1);
    }

    if (mysql_query(con, "CREATE DATABASE testdb"))
    {
        fprintf(stderr, "%s\n", mysql_error(con));
        mysql_close(con);
        exit(1);
    }

    mysql_close(con);
    exit(0);
}

编译命令

gcc .\mysqlcon.c -o mysqlcon -L"C:\Program Files\MariaDB 10.9\lib\" -l"libmariadb.lib"

错误信息(翻译后)

PS C:\Users\Pan\Desktop\Mysqlcon> gcc .\mysqlcon.c -o mysqlcon -L"C:\Program Files\MariaDB 10.9\lib\" -l"libmariadb.lib"
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0x1e): 未定义引用 `mysql_init@4'
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0x35): 未定义引用 `mysql_error@4'        
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0xa3): 未定义引用 `mysql_real_connect@32'
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0xb5): 未定义引用 `mysql_error@4'        
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0xdf): 未定义引用 `mysql_close@4'        
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0x101): 未定义引用 `mysql_query@8'       
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0x113): 未定义引用 `mysql_error@4'       
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0x13d): 未定义引用 `mysql_close@4'
C:\Users\Pan\AppData\Local\Temp\ccYX5KZT.o:mysqlcon.c:(.text+0x157): 未定义引用 `mysql_close@4'
collect2.exe: error: ld 返回1退出状态

解决步骤

1. 修正链接库写法

GCC在Windows下链接库时,无需带lib前缀和.lib后缀,把编译命令里的-l"libmariadb.lib"改成-lmariadb。

2. 修正头文件引用

当前引用的是MariaDB服务端头文件,应使用客户端头文件。把代码中的绝对路径include替换为:

#include <mysql.h>

然后在编译命令中通过-I参数指定MariaDB的include目录:
-I"C:\Program Files\MariaDB 10.9\include"

3. 完整修正后的编译命令

gcc .\mysqlcon.c -o mysqlcon -I"C:\Program Files\MariaDB 10.9\include" -L"C:\Program Files\MariaDB 10.9\lib" -lmariadb

4. 额外检查项

  • 确认C:\Program Files\MariaDB 10.9\lib目录下存在libmariadb.lib(静态库)或mariadb.lib(动态导入库);若使用动态库,需将libmariadb.dll放到可执行文件目录,或添加到系统PATH环境变量。
  • GCC 6.3.0版本较老,可能与MariaDB 10.9的库存在兼容性问题,建议更新至较新的GCC版本(如12.x系列)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:25:25