可以在vs 2017上构建Mysql Connector C ++吗?

时间:2018-07-02 08:38:40

标签: visual-studio-2017 mysql-connector

我试图从源代码到静态库构建mysql-connector-c ++。

参考官方规范here,我通过以下命令生成了Visual Studio解决方案:

cmake -DMYSQL_DIR="E:\mysql-5.7.21-winx64" -DWITH_BOOST="E:\libs\boost_1_67_0_BUILDED" -DWITH_JDBC=ON -G "Visual Studio 15 2017 Win64" ../

然后,我打开由cmake生成的vs解决方案。运行build,获得两个库:mysqlcppconn8-static-mt.libmysqlcppconn-static-mt.lib,并将它们复制到我的项目中。

构建项目(也是vs2017版本)时,出现错误:

mysqlcppconn-static-mt.lib(net_serv.obj) : error LNK2038: 检测到“_MSC_VER”的不匹配项: 值“1800”不匹配值“1900”(ActionProcessor.obj 中)

我很困惑。它们全部内置于vs2017中,并且平台工具集都设置为“ Visual Studio 2017(v141)”。我不明白1800_MSC_VER来自哪里。

2 个答案:

答案 0 :(得分:1)

这就是我所做的

规格

  • Visual Studio 15,(2017)
  • x64
  • 静态(.lib)
  • 具有静态运行时(/ MT)

工具

  • CMAKE
  • 野牛(在没有空格的文件夹中)
  • Perl(ActiveState或Strawberry)
  • OpenSSL 1.0.2q.tar.gz

将CMAKE,Bison和Pearl添加到您的系统路径中

检查所有设置是否正确

C:\>cmake --version
cmake version 3.9.6

C:\>bison --version
bison (GNU Bison) 2.4.1

C:\>m4 --version
m4 (GNU M4) 1.4.13

C:\>perl -version
This is perl 5, version 24, subversion 3 (v5.24.3)

第1步:构建OpenSSL 1.0.x

注意:如果要构建OpenSSL 1.1.x,步骤将有所不同

提取到:C:\mysql-8.0.15\openssl-1.0.2q

运行: VS 2017的x64本机工具命令提示符

cd C:\mysql-8.0.15\openssl-1.0.2q

发布

perl Configure VC-WIN64A no-shared --openssldir=.\rel64
ms\do_win64a
nmake -f ms\nt.mak
nmake -f ms\nt.mak install

调试

nmake -f ms\nt.mak clean
perl Configure debug-VC-WIN64A no-shared --openssldir=.\dbg64
ms\do_win64a
nmake -f ms\nt.mak
nmake -f ms\nt.mak install

第2步:构建MySQL(是实际数据库)

提取到:C:\mysql-8.0.15

运行: VS 2017的x64本机工具命令提示符

cd C:\mysql-8.0.15\

cmake . -G "Visual Studio 15 2017 Win64" ^
-DWITH_BOOST=C:/mysql-8.0.15/boost ^
-DDOWNLOAD_BOOST=1 ^
-DBUILD_CONFIG=mysql_release ^
-DWITH_SSL=C:\mysql-8.0.15\openssl-1.0.2q\rel64 ^
-DLINK_STATIC_RUNTIME_LIBRARIES=1

m4.exe复制到C:\mysql-8.0.15\sql\可以避免在构建过程中出现任何m4.exe错误

打开MySQL.sln并为 release x64

构建

binary_log_funcs.h中的binary_log_types.hmysql-8.0.15\libbinlogevents\export复制到mysql-8.0.15\include

该库应该位于:

静态发布库:C:\mysql-8.0.15\archive_output_directory\Release\mysqlclient.lib

第3步:构建MySQL Connector C ++

复制C:\mysql-8.0.15-dbg\archive_output_directory\Debug\mysqlclient.libC:\mysql-8.0.15-dbg\lib\vs14

运行 CMAKE GUI 浏览到MySQL连接器项目的路径。

点击配置,选择Visual studio 15 2017 Win64, native compilers

Tick BUILD_STATIC 
Tick STATIC_MSVCRT
TICK WITH_JDBC
remove WIN_SSL_YASL from CONFIG_VARS
WITH_SSL = C:\mysql-8.0.15\openssl-1.0.2q\rel64
WITH_BOOST= C:\mysql-8.0.15\boost\boost_1_66_0
MYSQL_DIR=C:\mysql-8.0.15

发布x64

打开MySQL_CONCPP.sln构建

该库位于:

C:\mysql-connector-c++-8.0.15\jdbc\install\lib\mysqlcppconn-static-mt.lib
C:\mysql-connector-c++-8.0.15\Release\mysqlcppconn8-static-mt.lib

第4步:对其进行测试

注意:此测试适用于JDBC样式的API。如果您不维护现有的应用程序,请使用新的xdevapi API。

创建一个新项目,并将以下内容放入main.cpp

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#define STATIC_CONCPP
#define CONCPP_BUILD_STATIC
#define CPPCONN_PUBLIC_FUNC
#include <driver.h>
#include <connection.h>
#include <statement.h>
#include <exception.h>

sql::Driver *mDriver;
sql::Connection *mConnection;

int main() {

    mDriver = get_driver_instance(); //or use: new MySQL_Driver() 
    try {
        mConnection = mDriver->connect("host", "username", "password");
        mConnection->close();
    }catch(sql::SQLException& ex) {
        std::cout << ex.what();
    }
    delete mConnection;
    return 0;
}

设置:链接器>输入>其他依赖项: libeay32.lib;mysqlclient.lib;mysqlcppconn8-static-mt.lib;mysqlcppconn-static-mt.lib;ssleay32.lib;%(AdditionalDependencies)

设置:配置属性> VC ++目录

  • 包括目录。
  • 图书馆目录。

答案 1 :(得分:0)

老实说,我什至不知道从哪里开始解释。建立起来是一个巨大的痛苦。

在开始阅读本文之前,请确保您具有以下内容:

  • C:\ boost
  • C:\ OpenSSL-Win32
  • C:\ OpenSSL-Win64

因为我正在编写自己的“包装程序”并试图使UNICODE正常工作,所以我得到了奇怪的异常,并且我无法调试任何东西,因为我下载了没有调试信息的最新软件包({{3} })

这是我第一次尝试构建它,因此我去了他们的Github存储库并获取了最新的“主”:https://dev.mysql.com/downloads/connector/cpp/

但是!它不包含“ JDBC”源,这是“本地”连接器所称的方式。因此,我从分支https://github.com/mysql/mysql-connector-cpp中抓取了文件,然后将文件复制到“ mysql-connector-cpp-master \ jdbc”中。

好。我打开了“ VS 2017的x64本机工具命令提示符”,并导航到“ mysql-connector-cpp-master ”。此时,我仍然不知道我在做什么以及如何构建它,我从文档和此处的其他文章中所能理解的就是运行:

cmake -DWITH_JDBC=ON --build .

这开始进行配置并建立OK,但在此处停止:

-- Searching for static libraries with the base name(s) "mysqlclient"
CMake Error at FindMySQL.cmake:524 (message):
  Could not find "mysql.h" from searching "/usr/include/mysql
  /usr/local/include/mysql /opt/mysql/mysql/include
  /opt/mysql/mysql/include/mysql /usr/local/mysql/include
  /usr/local/mysql/include/mysql C:\Program Files/MySQL/*/include
  C:/MySQL/*/include"
Call Stack (most recent call first):
  CMakeLists.txt:332 (INCLUDE)

好。那么,现在...“ mysql.h”在哪里?搜索...并搜索后,我发现:https://github.com/mysql/mysql-connector-cpp/tree/jdbc

我引用:

  

获取MySQL Community Server并将其安装在系统上。它   包含一个名为include的目录,您可以在其中找到mysql.h。

好的,我们需要更多的东西。因此,我下载了Missing mysql.h and trying to find mysql-devel,然后再次运行命令。

快乐的日子,发生了一些事,但还没有库。但是我确实得到了一个VS 2017解决方案,名为:“ MYSQLCPPCONN.sln”。

这包含VS 2017配置,用于为Win32构建库。当然,尝试使用此解决方案进行构建会给您很多未解决的外部符号。

所以我再次运行cmake,但添加了静态选项:

cmake -DWITH_JDBC=ON -DBUILD_STATIC=ON --build .

这一次,当我打开“ MYSQLCPPCONN.sln”时,我可以看到另一个项目“ mysqlcppconn-static”,并且可以正常运行而没有问题。

但是,就我而言,我需要x64。我只是通过复制Win32中退出的配置为x64创建了一个新配置。

就是这样,我同时拥有Win32和x64“ mysqlcppconn-static.lib”。

目前的总体结论:

  • 很难构建,如果没有经验,您将花费一些时间... 时间。
  • 没有适当的文档,他们现有的文档很差
    书面的,非常令人困惑。
  • 不支持UNICODE,可以,项目编译为多字节 字符集

我将查看是否可以调试,并找出使用该库时从库中获取异常的原因(根据他们的文档):

sql::ConnectOptionsMap connection_properties;

connection_properties["hostName"] = "";
connection_properties["port"] = "";
connection_properties["userName"] = "";
connection_properties["password"] = "";
connection_properties["schema"] = "";
connection_properties["OPT_CONNECT_TIMEOUT"] = 10;
connection_properties["CLIENT_MULTI_STATEMENTS"] = (true);
connection_properties["OPT_CHARSET_NAME"] = "utf8";
connection_properties["OPT_SET_CHARSET_NAME"] = "utf8";

我希望您可以使用此信息来构建您的库,并希望将来它会变得更加容易和清晰。

祝你好运。