我试图从源代码到静态库构建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.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来自哪里。
答案 0 :(得分:1)
这就是我所做的
规格
工具
将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.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 Connector 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
为发布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)
老实说,我什至不知道从哪里开始解释。建立起来是一个巨大的痛苦。
在开始阅读本文之前,请确保您具有以下内容:
因为我正在编写自己的“包装程序”并试图使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”。
目前的总体结论:
我将查看是否可以调试,并找出使用该库时从库中获取异常的原因(根据他们的文档):
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";
我希望您可以使用此信息来构建您的库,并希望将来它会变得更加容易和清晰。
祝你好运。