mysql connector 1.1_源码编译mysql-connector-cpp 1.1.x

前言

Windows下C++访问MySQL,一开始使用ODBC,但是觉着有点麻烦,局限性也挺大。举例来说,一些C++特性比如string使用起来很麻烦,还有编码问题,ODBC有一个编码设置,ODBC连接还有一个编码设置,如果任何一个不同,都会导致乱码;如果任何一个与数据库的编码不同,也会乱码。所以改为使用MySQL官方的mysql-connector-cpp。这里记录一下编译过程中遇到的问题

mysql-connector-cpp虽然提供了安装程序,但是需要重新编译,除非你使用的环境与官方编译的环境一样,不然就会有崩溃的问题。因为不同环境下编译的类库,在使用时,可能导致内存申请释放的bug。我遇到的就是string字符串在赋值过程中崩溃。

准备工作

visual studio 2017

boost_1_64_0

mysql

cmake

我们可以直接使用vs的cmake编译,但是一些报错提示和配置太麻烦了,所以建议现在安装官方的cmake程序,然后生成vs程序再编译

mysql-connector-cpp使用了boost库,所以需要下载boost库,官方文档说明了最低版本,下载比它高的就可以。除了编译的时候用,后续开发也需要引入boost库

这里需要安装的mysql,就是需要mysql中的头文件和类库,在编译过程中需要,这里还有一个问题,就是mysql安装的是32位还是64位,看下面注意事项

下载源码

https://dev.mysql.com/downloads/connector/cpp/

打开网页

选择Archives

在Product Version选择1.1.12,这个是1.1中最高的版本,建议用最新的,解决了一些老的bug。因为8.0.x的版本编译需要openssl,没有编译过去,并且原来项目也用的1.1.x,8.0的写法也发生了改变,所以还是编译使用1.1。

在Operation System选择Source Code

然后下载Windows (Architecture Independent), ZIP Archive

No CMAKE_C_COMPILER could be found.

这是由于没有安装Windows 8.1 SDK/UCRT SDK,安装上就可以

第一个错误是没指定boost目录

在CMake界面,Add Entry,然后填写BOOST_ROOT,选择value为path,然后选择下载的boost目录即可

第二个错误是没指定mysql的头文件目录

点击出错的配置,选择mysql安装目录下的include目录

第三个错误是没指定mysql的类库

点击出错的配置,选择mysql安装目录下的lib/libmysql.lib

然后再configure就可以了

configure完成后点击generate

generate完成后,打开工程,运行buil all

编译完成后,在drive目录下就有我们需要的类库

9955cc0d9359808c4ee27cf96d89ebca.png

然后把这三个类库拷贝到我们自己工程目录下,在工程配置link,增加lib的地方加上mysqlcppconn.lib,并且在link,增加lib引用目录的地方填上对应的目录,这样就完成了,可以访问数据库了

注意事项

这里编译出来的lib库,d版本和r版本名称一样,可以自己改名称或是放到不同目录下,在我们自己工程引用的时候,d版本和r版本需要配置对应的类库,不能配置错了

在程序运行的时候,提示没有libmysql.dll,这个文件在mysql安装目录lib下,就是刚才引用类库的目录下。

如果我们的工程是32位,那么mysql-connector-cpp就必须编译32位的类库,那么cmake配置的时候就必须配置x86的,那么mysql就必须安装32位的(这个安装仅仅是为了获得编译和开发的时候需要的类库,与开发完成,服务器上实际访问的数据库没关系)。

如果我们的工程师64位,那么mysql-connector-cpp就必须编译64位类库,cmake需要配置x64工程,需要64位mysql的类库。

所以我们可以分别安装32位和64位mysql,然后把对应的include和lib拷贝出来单独用来编译。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值