c++鏈接mysql並提示「沒法解析的外部符號 _mysql_server_init@12」解決方法&提示缺乏「libmysql.dll」

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

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

設置項目屬性

  項目 -  C/C++ - 常規 - 附加包含目錄 裏面添加 C:\mysql\mysql-8.0.16-winx64\include。  你們依葫蘆畫瓢,改爲本身的相應目錄。

   項目 - 配置屬性 - 連接器 - 常規 - 附加庫目錄, 添加C:\mysql\mysql-8.0.16-winx64\lib。 也是要換成本身的目錄。c++

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

 

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

測試程序

 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,以下圖所示:spa


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

沒有第二步會提示缺乏「libmysql.dll」。3d

 

 

參考連接:

1. c++鏈接mysql並提示「沒法解析的外部符號 _mysql_server_init@12」解決方法

2. VS中MFC鏈接MySQL因爲系統不一樣位(32/64)引發的錯誤:沒法解析的外部符號 _mysql_init@四、_mysql_query 

3. 測試代碼

相關文章
相關標籤/搜索