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

使用C语言连接MariaDB出现undefined reference错误,求问题原因与解决方法

问题原因与解决方法

原因分析

你遇到的是链接器错误,并非编译错误。编译阶段已经成功找到头文件,但链接时gcc无法定位MariaDB客户端库中mysql_init、mysql_real_connect等函数的具体实现,因此抛出"undefined reference"报错。

解决步骤

1. 编译时指定MariaDB库路径与库文件

编译命令需要添加两个核心参数:

  • -L:指定MariaDB库文件所在目录(默认安装路径通常为C:/Program Files/MariaDB 10.11/lib)
  • -l:指定要链接的库名(MariaDB客户端库一般为mariadb,即-lmariadb)

完整编译命令示例:

gcc Db_con.c -o Db_con -I"C:/Program Files/MariaDB 10.11/include" -L"C:/Program Files/MariaDB 10.11/lib" -lmariadb

注:-I用于指定头文件目录,若之前已通过其他方式配置,可根据情况保留或省略。

2. 修复代码逻辑错误

你的代码中mysql_real_connect的if语句末尾多了一个分号:

if (!mysql_real_connect(...)); // 此处分号属于错误写法
{
    // 错误处理代码
}

这个分号会让if语句成为空语句,无论连接是否成功,都会执行后续错误处理块导致程序直接退出。需删除该分号:

if (!mysql_real_connect(
     conn,                 // Connection
     "mariadb.example.net", // Host
     "db_user",            // User account
     "db_user_password",   // User password
     "test",               // Default database
     3306,                 // Port number
     NULL,                 // Path to socket file
     0                     // Additional options
  )) // 移除末尾分号
{
    // 错误处理代码
}

3. 额外注意事项

  • 确保gcc与MariaDB的位数匹配:32位gcc对应32位MariaDB,64位gcc对应64位MariaDB,否则会出现架构不匹配的链接错误。
  • 运行程序时,需将MariaDBlib目录下的libmariadb.dll复制到程序所在目录,或把该目录添加到系统PATH环境变量中,否则程序会因找不到动态链接库而无法运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 05:15:35