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
相关产品推荐
相关产品推荐

