我试图建立的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.lib
,mysqlcppconn-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已经从何而来。
下面是我做的
眼镜
工具
添加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.exe
到C:\mysql-8.0.15\sql\
建在此期间避免任何m4.exe错误
打开MySQL.sln
和建立发行64
复制binary_log_funcs.h
和binary_log_types.h
从mysql-8.0.15\libbinlogevents\export
到mysql-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.lib
到C:\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 ++目录
我甚至不知道从哪里开始解释说实话。建立,这是一个巨大的痛苦。
你开始阅读之前,请确保您具备以下条件:
因为我在写我自己的“包装”,并试图使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”。
此时的总体结论:
我会看看我是否可以调试和使用这个时候(从文件)库中找出为什么我收到的例外:
cmake -DWITH_JDBC=ON -DBUILD_STATIC=ON --build .
我希望你可以用这个信息来建立你的图书馆,并希望在未来它会变得更加容易和清晰。
祝好运。