QtCreator使用C语言连接Mysql体验---解决undefined reference to `mysql_init' 问题

上机环境 ubuntu 20.04 Qt 5.12

有时候写博的目的是分享自己踩过的坑,为同样喜爱编程的朋友树立警示牌,以免他们热情的心受到伤害。

我一直以来认为C/C++是黑客的标配武器,因此对这两种语言有种膜拜的心情,好的语言当然要拿来连接数据库,C也不例外。当你找到mysql的官方文档,他们依旧是非常洒脱的说:mysql就是用C语言实现的!言下之意当然是让你去看mysql.h头文件,幸运的是,你按照官方文档安装mysql能够顺利的找到mysql.h文件,以ubuntu20.04为例,按部就班的步骤,不出意外你在路径 /usr/include/mysql  就可以找到

不过接下来,成批的函数声明还是有点搞得人一头雾水,犹如非法渠道获得的重武器一样,你别想得到原产大厂的技术指导,那些人永远以为所有人都能轻易玩转这些函数/接口,可是姑爷爷我就不行。

好在有许多先贤蹚出来一条路,这也使我庆幸自己得以降生在中国这样一个国家里,要是诞生在一个小国可能还麻烦了!

多数网上的实现表明,使用C语言连接mysql之前

1.我们要在项目中引入mysql/mysql.h

2.声明 MYSQL* 类的变量(感觉像个结构体指针,用于承载连接任务,储存查询结果等),我声明的变量为mysql

3.对MYSQL*进行初始化,调用mysql_init()

如果你参考了近些年的博客,那么多数范例中给出的函数都有效,但是注意,一些函数的签名(参数传入顺序及类型,数量)有所调整,我的做法是大的实现思路参考网上范例,真正代码实现按照你机器上的mysql.h给出的函数签名执行!

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <mysql/mysql.h>
 4 
 5 
 6 
 7 
 8 MYSQL *mysql;
 9 MYSQL_ROW ret_rownum;
10 MYSQL_RES* res;
11 const char *host="你的 mysql IP";
12 const char *user="root";
13 const char *passwd="你的密码";
14 const char *db="dingsbookroom";
15 int retnum=0;
16 void connectdb();
17 
18 
19 
20
21 int main()
22 {
23     connectdb();
24     printf("Hello World!
");
25     return 0;
26 }
27 void connectdb()
28 {
29     mysql=mysql_init(NULL);
30     if(!mysql_real_connect(mysql, host,user, passwd,db, 3306,NULL,0))
31     {
32         printf("hell~no
");
33     }
34     mysql_query(mysql,"set names utf-8");
35     const char* querystat ="select * from conntest";
36     mysql_real_query(mysql,querystat,strlen(querystat));
37     res=mysql_store_result(mysql);
38     retnum = mysql_num_rows(res);
39     printf("mapping rows %d
",retnum);
40 }

问题出现了,编译时mysql_init()就提示错误 undefined reference to `mysql_init' 

what the hell!

估计很多小伙伴跟我一样心脏病差点发了,放弃linux转windows!什么?windows以后也可能往linux发展?那把微软大当家的劫持了!

网上一些提示是:虽然我们引入了 mysql.h但是真正的实现在一个名为libmysqlclient的目标文件里(linux下应该为libmysqlclient.so windows下为 libmysqlclient.dll)

所以解决方法是在我们的项目中加入这一目标文件!

 选中项目根目录 这里是connmysql 然后右键点击 Add Library

 

 这样,你的mysql_init()和其他函数得以正常工作了!

项目中的pro文件也包含了保证功能正常实现的库文件路径如下图(局部):

运行结果:

 同理,如果是在windows下的visual studio,估计需要在项目下包含libmysqlclient.dll之类,(没试过,只是猜想)

原文地址:https://www.cnblogs.com/saintdingspage/p/14001006.html