Проблема при связывании mysqlcppconn-static с использованием MySQL Connector C++

Я пишу о проблеме, которая возникла у меня при установке 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"

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

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

[EDIT]: следуя приведенному здесь предложению, компиляция теперь проходит нормально. Я думаю, что есть еще одна проблема, программа-пример выдает исключение при вызове метода подключения:

/* 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");

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

I had the same error on linux. The error was : I was using g++-4.8 to build the project The issue lies on the version of the build tools (gcc,msvs,clang) used to build the project by trying to update g++, but I have tha latest version. Probably is more difficult to make this library work than writing the code I need for my application, I hope someone can suggest me what to try next.

Спасибо

Это означает, что вам нужно также связать библиотеки, которые предоставляют пропущенные символы: ssl и крипто.

Tsyvarev 10.06.2019 21:46

Спасибо за комментарий, попытался добавить следующие строки: target_link_libraries(MySQLConnectorTest ssl.so) target_link_libraries(MySQLConnectorTest crypto.so) Но в выводе ничего не меняется

Zack 10.06.2019 23:44

Поскольку это mysqlcppconn-static.a библиотека, которая требует пропущенных символов, ssl и crypto библиотеки должны быть добавлены после это: target_link_libraries(MySQLConnectorTest mysqlcppconn-static.a ssl crypto)

Tsyvarev 10.06.2019 23:55

О, хорошо, кажется, это начинает работать, но теперь у меня есть эта ошибка: /usr/bin/ld: /home/riccardo/MySQLConnectorTest/../mysql-connector-c++/lib‌​64/libmysqlcppconn-s‌​tatic.a( libmysqlclie‌​nt_client_plugin.cc.‌​o): неопределенная ссылка на символ 'dlclose@@GLIBC_2.2.5' //lib/x86_64-linux-gnu/libdl.so.2: ошибка при добавлении символов: DSO отсутствует в командной строке Попытка добавить "dl" в конец, но это приводит к большому количеству ошибок для pthread.

Zack 11.06.2019 00:21

Так что вам тоже нужно связать с библиотекой dl. Просто Google для пропущенных символов, и вы найдете, с какой библиотекой вам нужно связать.

Tsyvarev 11.06.2019 00:23

Спасибо за помощь, компиляция идет нормально, добавлены dl и pthread. Теперь у меня есть ошибки при выполнении. Я следую этому stackoverflow.com/questions/16605623/…. Один из отсутствующих символов - GLIBCXX_3.4.20, но я нашел его в своей системе.

Zack 11.06.2019 00:39
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
1 415
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Кажется, я решил простым способом. Пишу сюда что пробовал и какие ошибки получил. Я снова прочитал руководство разработчика и мне кажется, что при использовании предоставленных двоичных файлов могут возникнуть проблемы из-за разных компиляторов, используемых для библиотеки и для проекта. Затем я попытался скомпилировать исходники, чтобы убедиться, что компилятор, используемый для библиотеки и для моего проекта, один и тот же. Я следовал этому руководству: 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

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

Другие вопросы по теме