Проблема при связывании mysqlcppconn-static с использованием MySQL Connector C ++ - PullRequest
0 голосов
/ 10 июня 2019

Я пишу о проблеме, которая возникла во время установки MySQL Connector C ++. Я использую двоичный дистрибутив коннектора для Linux (Ubuntu 18.04), поэтому я помещаю каталог библиотеки за пределы своего проекта (это один из примеров, приведенных в справочном руководстве здесь (https://dev.mysql.com/doc/connector-cpp/1.1/en/connector-cpp-installation-binary.html).

)

В моем проекте (Clion) у меня есть этот файл cmake:

cmake_minimum_required(VERSION 3.14)
project(MySQLConnectorTest)

set(CMAKE_CXX_STANDARD 14)

link_directories(../mysql-connector-c++/lib64)
link_directories(/opt/lampp/lib)
add_executable(MySQLConnectorTest main.cpp)
include_directories(../mysql-connector-c++/include/jdbc)
target_link_libraries(MySQLConnectorTest mysqlclient.a)
target_link_libraries(MySQLConnectorTest mysqlcppconn-static.a)

У меня есть установленная MySQL установка, предоставляемая с XAMPP. Так что каталог, где найти mysqlclient.a, равен /opt/lampp/lib

Проблема в том, что при связывании mysqlcppconn-static.a во время компиляции я получаю длинный список ошибок, таких как:

/home/riccardo/MySQLConnectorTest/../mysql-connector-c++/lib64/libmysqlcppconn-static.a(libmysqlclient_client.cc.o): 
nella funzione "ssl_verify_server_cert(Vio*, char const*, char const**) [clone .isra.7]":
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3283: riferimento non definito a "SSL_get_peer_certificate"
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3288: riferimento non definito a "SSL_get_verify_result"
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3359: riferimento non definito a "X509_free"
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3302: riferimento non definito a "X509_check_host"
./obj/libmysql/../../mysql-8.0.16/sql-common/client.cc:3304: riferimento non definito a "X509_check_ip_asc"

Может кто-нибудь объяснить мне, что это значит? Может кто-нибудь подсказать, как исправить?

Заранее спасибо.

[РЕДАКТИРОВАТЬ]: следуя предложенному здесь предложению, компиляция теперь идет нормально. Я думаю, что есть еще одна проблема, пример программы вызывает исключение при вызове метода подключения:

/* Create a connection */
driver = get_driver_instance();
con = driver->connect("tcp://127.0.0.1:3306", "root", "root");
/* Connect to the MySQL test database */
con->setSchema("test");

Я нашел другие сообщения по этой проблеме, например соединение c ++ mysql bad_alloc с использованием коннектора c ++ но это не помогает в Linux, в частности, я попытался следовать подсказке:

У меня была такая же ошибка на Linux. Ошибка была: я использовал g ++ - 4.8 для сборки проекта Проблема заключается в версии инструментов сборки (gcc, msvs, clang), используемых для сборки проекта. пытаясь обновить g ++, но у меня последняя версия. Возможно, сделать эту библиотеку более трудной, чем написание кода, необходимого для моего приложения, я надеюсь, что кто-то может подсказать, что мне делать дальше.

Спасибо

1 Ответ

0 голосов
/ 11 июня 2019

Кажется, я решил простым способом.Я пишу здесь, что я пробовал и какие ошибки я получил.Я снова читаю руководство разработчика, и кажется, что при использовании двоичных файлов могут возникнуть проблемы из-за разных компиляторов, используемых для библиотеки и для проекта.Затем я попытался скомпилировать исходники, чтобы убедиться, что компилятор, используемый для библиотеки и для моего проекта, одинаков.Я следовал этому руководству: https://aaronxu17.github.io/blog/install-mysql-connector/

Это не сработало, скомпилированная библиотека называлась mysqlcppconn8-static.a вместо mysqlcppconn-static.a, но меняла ссылку на имя на ту, которая у меня былаОшибка компиляции, подобная этой:

reference not defined to get_driver_instance

Наконец-то я нашел это https://stackoverrun.com/it/q/4344116, и решил просто с помощью

sudo apt-get install libmysqlcppconn-dev

Теперь все, что пыталось, кажется глупым в отношении окончательного решения.Я надеюсь, что это может сэкономить время другим людям.Спасибо

...