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!\n");
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\n");
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\n",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之類,(沒試過,只是猜想)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM