zoukankan      html  css  js  c++  java
  • 源码编译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目录下就有我们需要的类库

    然后把这三个类库拷贝到我们自己工程目录下,在工程配置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拷贝出来单独用来编译。

  • 相关阅读:
    Ch’s gift HDU
    String HDU
    Rikka with String HDU
    DNA repair HDU
    Ring HDU
    A Secret HDU
    看详细的tomcat报错信息
    linux tomcat服务器优化配置
    linux常用命令
    关于Context []startup failed due to previous errors有效解决方式
  • 原文地址:https://www.cnblogs.com/studywithallofyou/p/12876690.html
Copyright © 2011-2022 走看看