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

Mac OS下如何使用gcc编译基于mariadb-connector-c的C程序

在Mac OS Monterey上编译使用MariaDB Connector/C的C程序

问题场景

已通过Homebrew在Mac OS Monterey系统上安装MariaDB及MariaDB Connector/C,但编译调用该连接器的C源码时持续报错,尝试过以下几种编译命令均失败:

  • 直接编译,提示找不到mysql.h头文件:

    gcc -o test main.c
    # 报错:main.c:1:10: fatal error: 'mysql.h' file not found
    
  • 错误将mariadb_config作为链接文件传入,导致链接失败:

    gcc -o main main.c /usr/local/bin/mariadb_config
    # 报错:ld: can't link with a main executable file '/usr/local/bin/mariadb_config' for architecture x86_64
    
  • 仅添加链接参数,仍无法找到头文件:

    gcc -o test main.c $(mariadb_config --libs)
    # 报错:main.c:1:10: fatal error: 'mysql.h' file not found
    

测试用main.c代码如下:

#include <mysql.h>
#include <stdio.h>
#include <stdlib.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", "(...)", "(...)", 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);

  printf("MySQL client version: %s\n", mysql_get_client_info());

  exit(0);
}

正确编译方法

编译时需要同时告知编译器MariaDB头文件的位置和需要链接的MariaDB库文件,mariadb_config工具可以自动生成这两类参数,使用以下命令即可完成编译:

gcc -o test main.c $(mariadb_config --cflags --libs)

参数说明

  • $(mariadb_config --cflags):生成编译阶段所需的头文件搜索路径参数,解决mysql.h找不到的问题
  • $(mariadb_config --libs):生成链接阶段所需的库文件链接参数,确保程序能正确关联MariaDB运行库

之前尝试失败的原因

  • 第一次编译未添加任何MariaDB相关参数,编译器不知道去哪里找头文件和库
  • 第二次错误地将mariadb_config可执行文件本身作为链接输入,而非通过它获取编译参数
  • 第三次仅添加了链接阶段的参数,但未指定头文件路径,导致编译阶段无法找到mysql.h

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 02:45:29