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. 测试代码

posted @ 2019-05-06 18:56  Rogn  阅读(2633)  评论(0编辑  收藏  举报