c++連接mysql並提示“無法解析的外部符號 _mysql_server_init@12”解決方法&提示缺少“libmysql.dll”


課程作業要用c++連接mysql server,但是出現些小問題,經查閱資料已經解決,做一下筆記。

環境:vs2017, mysql版本是8.0.16-winx64。

設置項目屬性

  項目 -  C/C++ - 常規 - 附加包含目錄 里面添加 C:\mysql\mysql-8.0.16-winx64\include。  大家依葫蘆畫瓢,改成自己的相應目錄。

   項目 - 配置屬性 - 鏈接器 - 常規 - 附加庫目錄, 添加C:\mysql\mysql-8.0.16-winx64\lib。 也是要換成自己的目錄。

  項目 - 配置屬性 - 鏈接器 - 輸入 - 附加依賴項    添加libmysql.lib.

 

 其實就是將頭文件和庫文件包含進來。

測試程序

 1 //下面的代碼是一個實現C++連接MYSQL數據庫的很好的例子
 2 
 3 #include <winsock.h>
 4 #include <iostream>
 5 #include <string>
 6 #include <mysql.h>
 7 using namespace std;
 8 
 9 #pragma comment(lib, "ws2_32.lib")
10 #pragma comment(lib, "libmysql.lib")
11 //單步執行,不想單步執行就注釋掉
12 #define STEPBYSTEP
13 
14 int main() {
15     cout << "****************************************" << endl;
16 
17 #ifdef STEPBYSTEP
18     system("pause");
19 #endif
20 
21     //必備的一個數據結構
22     MYSQL mydata;
23 
24     //初始化數據庫
25     if (0 == mysql_library_init(0, NULL, NULL)) {
26         cout << "mysql_library_init() succeed" << endl;
27     }
28     else {
29         cout << "mysql_library_init() failed" << endl;
30         return -1;
31     }
32 
33 #ifdef STEPBYSTEP
34     system("pause");
35 #endif
36 
37     //初始化數據結構
38     if (NULL != mysql_init(&mydata)) {
39         cout << "mysql_init() succeed" << endl;
40     }
41     else {
42         cout << "mysql_init() failed" << endl;
43         return -1;
44     }
45 
46 
47 
48 #ifdef STEPBYSTEP
49     system("pause");
50 #endif
51 
52     //在連接數據庫之前,設置額外的連接選項
53     //可以設置的選項很多,這里設置字符集,否則無法處理中文
54     if (0 == mysql_options(&mydata, MYSQL_SET_CHARSET_NAME, "gbk")) {
55         cout << "mysql_options() succeed" << endl;
56     }
57     else {
58         cout << "mysql_options() failed" << endl;
59         return -1;
60     }
61 
62 #ifdef STEPBYSTEP
63     system("pause");
64 #endif
65 
66     //連接數據庫
67     if (NULL != mysql_real_connect(&mydata, "localhost", "root", "123456", "mysql",3306, NULL, 0))   //這里的地址,用戶名,密碼,端口可以根據自己本地的情況更改
68     {
69         cout << "mysql_real_connect() succeed" << endl;
70     }
71     else {
72         cout << "mysql_real_connect() failed" << endl;
73         return -1;
74     }
75 
76     return 0;
77 }

如果能運行,OK!后面的不用看了。

 

問題

無法解析的外部符號 _mysql_real_connect...

方法一:由於VS建立的項目默認為WIN32 項目,需將平台改為64。設置如下:

(1) 項目—》屬性—》配置屬性—》配置管理器—》活動解決方案平台,下拉選新建,出現一個新的對號框,在鍵入選擇新平台中選擇X64,如下圖所示:


(2)不是將C:\mysql\mysql-8.0.16-winx64\lib(安裝MySql下的lib文件夾)中的libmysql.dll拷到項目下的Debug文件夾中,而是拷到項目下x64\Debug中(或者C:\Windows\System32中)。重啟(必需的)。完畢。。  

沒有第二步會提示缺少“libmysql.dll”。

 

 

參考鏈接:

1. c++連接mysql並提示“無法解析的外部符號 _mysql_server_init@12”解決方法

2. VS中MFC連接MySQL由於系統不同位(32/64)引起的錯誤:無法解析的外部符號 _mysql_init@4、_mysql_query 

3. 測試代碼


免責聲明!

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



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