参考:Visual Studio 连接 MySQL 数据库(包含常见错误及解决方法)
需求描述:原始软件项目基于 Visual Studio 2010开发,现该项目需要加入 mysql 读写的功能。
问题描述:最新版本的Mysql 8.0 connector要求VS2015以上的版本 (mysql 5.4.62 以后的所有版本要求VS2012以上)。我希望在不修改项目开发工具版本(VS2010)的基础上可以实现项目对各个版本mysql 的调用。
具体解决方法:
(1)环境 :windows7 x64 + visual studio 2010
安装 mysql8.0 ,安装过程中选择customer安装 mysql 8. 0 server 和 connector C++ 8.0 两个部分。
问题分析:为什么选择 mysql 8.0 我测试了多种 mysql 发现对 vs2010的兼容性并不好, 低版本Mysql 5.5 安装目录下没有 include文件夹;官网上其余有mysql for visual studio模块的mysql 都是要求visual studio 版本在VS2012以上。 索性就直接安装了最新版mysql,自定义安装只安装其中的 mysql Server和connector C++ 两个模块
(2)visual studio 2010 配置
程序中要调用mysql相关操作需要加入头文件
#include<mysql.h>
另外需要修改项目属性:
VC++目录下:“包含目录”中加入 “mysql安装目录\MySQL Server 8.0\include”
“库目录”中加入 “mysql安装目录\MySQL Server 8.0\lib”
“链接器->输入->附加依赖项” 加入 “libmysql.lib”
将 libmysql.dll 文件复制到程序的编译debug 文件夹(libmysql.dll文件在“C:\Program Files\MySQL\MySQL Server 8.0\lib”路径下):
(3)遇到的问题与解决方法
1.程序编译错误:“无法找到 stdbool.h文件”
mysql.h(43): fatal error C1083: 无法打开包括文件:“stdbool.h”: No such file or directory
分析:VS2010不完全支持C99,stdbool.h是C99的。“VS2013以后开始改善对C99的支持,Modern versions of Visual Studio (2013 and later) offer improved support for C99,VS2015支持stdbool.h”。 简单的说就是VS2010不支持这个功能。
解决方法:自己创建 stdbool.h文件,内容如下。 文件放入到“C:\Program Files\MySQL\MySQL Server 8.0\include”路径下:
typedef int bool;
#define false 0
#define true 1
2.程序运行错误:缺少libeay32.dll文件和SSLEAY32.dll文件
问题分析:电脑的C:/windows/system32文件夹下缺少这两个dll文件。 解决方法有两种:使用360或腾讯电脑管家系统修复;或则在网上手动下载 dll文件复制到“C:\Windows\System32”路径下,手动注册。 经过实际测试,360和腾讯电脑管家的自动修复工具都不能解决这个问题,而且在网上下载的各种 dll文件都不匹配当前的系统。
解决方法:最终使用手动修复的方法,将64位的两个dll文件放入到system32文件夹,并 “开始->运行”分别输入下面命令注册两个 dll 文件 : regsvr32 LIBEAY32.dll regsvr32 SSLEAY32.dll。 附录:在网上找的可以匹配的 LIBEAY32.dll和SSLEAY32.dll dll文件下载链接。
3.调用mysql要求项目必须设置为x64开发平台的,因为所调用的mysql的库文件全都是为64位的。
问题分析:我的原始项目是基于x86平台开发,目的是让项目可以在32位和64位操作系统上都正常运行。但是调用mysql 8.0时发现Mysql库调用要求项目是 x64平台。
最终解决方法:没有找到让mysql可以被32位工程调用的方法,准确的说Mysql 8.0已经没有32位的版本安装包。最终我将我的项目修改为基于X64平台,将其中不兼容64位平台的部分模块进行修改重写。
本文由VS软件圈(vssoft.net)发布,不代表VS软件圈立场,转载联系作者并注明出处:https://vssoft.net/vsazwt/VS2010anzhuangwenti/2020/0724/2483.html