Можно ли построить Mysql Connector C ++ на версии 2017 года? - PullRequest
0 голосов
/ 02 июля 2018

Я пытался собрать mysql-connector-c ++ из исходного кода в статическую библиотеку.

Ссылаясь на официальную спецификацию здесь , я сгенерировал решение 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" ../

Затем я открыл решение vs, сгенерированное cmake.Run 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.

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Я даже не знаю, с чего начать объяснение, если честно. Создание этого было огромной болью.

Прежде чем вы начнете читать это, убедитесь, что у вас есть следующее:

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

Поскольку я писал свою собственную «оболочку» и пытался заставить UNICODE работать должным образом, я получал странные исключения и не мог ничего отладить, потому что я скачал последний пакет, который собран без отладочной информации (https://dev.mysql.com/downloads/connector/cpp/)

Это первый раз, когда я пытаюсь построить это, поэтому я пошел в их репозиторий Github и взял последний «мастер»: https://github.com/mysql/mysql-connector-cpp

НО! Он не содержит источника "JDBC" s, который, кстати, является "родным" соединителем, как они его называют. Поэтому я взял его из ветки: https://github.com/mysql/mysql-connector-cpp/tree/jdbc, а затем скопировал файлы в «mysql-connector-cpp-master \ jdbc».

OK. Я открыл « x64 Командная строка Native Tools для VS 2017 » и перешел к « mysql-connector-cpp-master ». На данный момент я все еще не знал, что я делаю и как это сделать, все, что я мог понять из документации и других статей, это запустить:

cmake -DWITH_JDBC=ON --build .

Это начало настраивать вещи и строить ОК, но на этом остановилось:

-- 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)

OK. Так что теперь ... где находится "mysql.h" ?! После поиска ... и поиска я нашел это: Отсутствует mysql.h и пытаюсь найти mysql-devel

И я цитирую:

Возьмите MySQL Community Server и установите его в своей системе. Это содержит каталог с именем include, в котором вы найдете mysql.h.

Хорошо, отлично, нам нужно больше вещей. Поэтому я загружаю: https://dev.mysql.com/downloads/mysql/ и снова запускаю команду.

Счастливого дня, что-то случилось, но пока нет. Однако я получил решение VS 2017 под названием: "MYSQLCPPCONN.sln".

Содержит конфигурацию VS 2017 для сборки библиотеки для Win32. И, конечно же, попытка построить это решение даст вам МНОГО неразрешенных внешних символов.

Итак, я снова запускаю cmake, но с добавленной статической опцией:

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

На этот раз, когда я открываю "MYSQLCPPCONN.sln", я вижу другой проект "mysqlcppconn-static", и он прекрасно работает без проблем.

Однако в моем случае мне нужен x64. Я только что создал новую конфигурацию для x64, скопировав существующую конфигурацию из Win32.

Итак, у меня есть и 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";

Я надеюсь, что вы сможете построить свою библиотеку с этой информацией, и, надеюсь, в будущем она станет более простой и понятной.

Удачи.

0 голосов
/ 24 июля 2018

Вот что я сделал

Характеристики

  • Visual Studio 15, (2017)
  • 64
  • Статический (.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

Выполнить: x64 Командная строка Native Tools для VS 2017

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

Release

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

Debug

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

Выполнить: x64 Командная строка Native Tools для 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 и собрать для выпуск 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 Connector.

Нажмите Настроить , выберите 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 сборка для Выпуск x64

Библиотека находится по адресу:

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: Проверьте это

Примечание. Этот тест предназначен для API стиля JDBC. Если вы не поддерживаете существующее приложение, используйте новый 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;
}

Set: Linker> Input> Дополнительные зависимости: libeay32.lib;mysqlclient.lib;mysqlcppconn8-static-mt.lib;mysqlcppconn-static-mt.lib;ssleay32.lib;%(AdditionalDependencies)

Set: Свойства конфигурации> Каталоги VC ++

  • Включить каталоги.
  • Библиотечные каталоги.
...