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

