可以在建立MySQL连接器C ++ VS 2017年?

问题描述 投票:1回答:2

我试图建立的MySQL连接器-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.Run产生的构建与解决方案,得到了两个库: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已经从何而来。

visual-studio-2017 mysql-connector
2个回答
2
投票

下面是我做的

眼镜

  • 的Visual Studio 15,(2017年)
  • 64位
  • 静态(.LIB)
  • 使用静态运行时(/ MT)

工具

  • cmake的
  • 野牛(在不包含空格的文件夹)
  • Perl的(或的ActiveState草莓)
  • OpenSSL的1.0.2q.tar.gz

添加CMake的,野牛和珍珠到系统路径

请检查您是否正确地得到了所有设置

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

运行:64位本机工具命令提示符VS 2017年

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

运行:64位本机工具命令提示符VS 2017年

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.exeC:\mysql-8.0.15\sql\建在此期间避免任何m4.exe错误

打开MySQL.sln和建立发行64

复制binary_log_funcs.hbinary_log_types.hmysql-8.0.15\libbinlogevents\exportmysql-8.0.15\include

图书馆应设在:

静态版本库:C:\mysql-8.0.15\archive_output_directory\Release\mysqlclient.lib

步骤3:构建MySQL连接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

打开MySQL_CONCPP.sln建立64版

该库位于:

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。如果你不是在维护现有的应用程序,使用新的API xdevapi。

创建一个新的项目,并把下面的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;
}

设置:链接器>输入>附加依赖:qazxsw POI

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

  • 包含目录。
  • 库目录。

0
投票

我甚至不知道从哪里开始解释说实话。建立,这是一个巨大的痛苦。

你开始阅读之前,请确保您具备以下条件:

  • C:\升压
  • C:\的OpenSSL的Win32
  • C:\ OpenSSL的 - Win64的

因为我在写我自己的“包装”,并试图使UNICODE正常工作,我是越来越怪异异常,我无法调试任何东西,因为我下载了它,而不调试信息最新的软件包(libeay32.lib;mysqlclient.lib;mysqlcppconn8-static-mt.lib;mysqlcppconn-static-mt.lib;ssleay32.lib;%(AdditionalDependencies)

这是我第一次尝试建立这一点,所以我去他们Github上库,抓住最新的“大师”:https://dev.mysql.com/downloads/connector/cpp/

但!这不包含“JDBC”的来源,这是顺便把“本地”连接器,因为它们调用它。所以,我从分支抓住它:https://github.com/mysql/mysql-connector-cpp,然后将文件复制到“使用mysql-connector-CPP主\ JDBC”。

好。我打开“或x64原生工具命令提示符为VS 2017年”,并导航到“使用mysql-connector-CPP主”。在这一点上,我仍然不知道我在做什么,以及如何构建它,我只能从文档和不同的文章在这里了解是运行:

https://github.com/mysql/mysql-connector-cpp/tree/jdbc

这开始配置的东西,并建立好了,但停在这里:

cmake -DWITH_JDBC=ON --build .

好。那现在......在哪里“的mysql.h”?! ...搜索和搜索之后,我发现这一点:-- 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社区服务器,并在系统上安装它。它包含一个名为包括在其中找到的mysql.h目录。

好吧,伟大的,我们需要更多的东西。于是我下载:Missing mysql.h and trying to find mysql-devel并再次运行该命令。

快乐的日子,发生了一件事,但还没有库。然而,我确实得到了VS 2017年解决方案叫做:“MYSQLCPPCONN.sln”。

这包含VS 2017年的配置,以构建库为Win32。当然还有尝试这种解决方案来构建会给你解析的外部符号不少。

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

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

当我打开“MYSQLCPPCONN.sln”这次我能看到另一个项目“mysqlcppconn静态的”,这建立精细无问题。

然而,在我的情况,我需要64。我只是通过复制弗朗的Win32退出的配置创造了64位新的配置。

所以这是它,我有Win32和64“mysqlcppconn-static.lib”。

此时的总体结论:

  • 挺难打造,没有经验,你会花一些时间......时间。
  • 没有适当的文件,其现有的文档不佳 书面和非常混乱。
  • 没有Unicode支持,是该项目作为编译多字节字符集。

我会看看我是否可以调试和使用这个时候(从文件)库中找出为什么我收到的例外:

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

我希望你可以用这个信息来建立你的图书馆,并希望在未来它会变得更加容易和清晰。

祝好运。

© www.soinside.com 2019 - 2024. All rights reserved.