Как использовать MariaDB с POCO (https://pocoproject.org/), используя C++ в Windows. Например, как мне связать библиотеки MariaDB и т. д. в CMake

я впервые пытаюсь связать MariaDB с программой C++ в CMake

Версия MySQL MySQL: 10.5.21 (какой сервер использует)

CMakeLists.txt, который у меня есть сейчас и который не работает, выглядит так:


`
cmake_minimum_required(VERSION 3.20)

project(Dance_Syllabuses_Backend VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)

set(MARIADB_DIR "C:/Program Files/MariaDB 10.5")
set(MARIADB_INCLUDE_DIR "${MARIADB_DIR}/include")
set(MARIADB_LIB_DIR "${MARIADB_DIR}/lib")

find_library(MARIADB_LIB NAMES mariadb PATHS ${MARIADB_LIB_DIR})

if (MARIADB_LIB)
    message(STATUS "Found MariaDB: ${MARIADB_LIB}")
else()
    message(FATAL_ERROR "MariaDB not found")
endif ()

set(ENABLE_NET OFF CACHE BOOL "Enable Net" FORCE)
set(ENABLE_ENCODINGS OFF CACHE BOOL "Enable Encodings" FORCE)
set(ENABLE_XML OFF CACHE BOOL "Enable XML" FORCE)
set(ENABLE_JSON OFF CACHE BOOL "Enable JSON" FORCE)
set(ENABLE_MONGODB OFF CACHE BOOL "Enable MongoDB" FORCE)
set(ENABLE_DATA_SQLITE OFF CACHE BOOL "Enable Data SQlite" FORCE)
set(ENABLE_REDIS OFF CACHE BOOL "Enable Redis" FORCE)
set(ENABLE_ZIP OFF CACHE BOOL "Enable Zip" FORCE)
set(ENABLE_PAGECOMPILER OFF CACHE BOOL "Enable PageCompiler" FORCE)
set(ENABLE_PAGECOMPILER_FILE2PAGE OFF CACHE BOOL "Enable File2Page" FORCE)
set(ENABLE_ACTIVERECORD OFF CACHE BOOL "Enable ActiveRecord" FORCE)
set(ENABLE_ACTIVERECORD_COMPILER OFF CACHE BOOL "Enable ActiveRecord Compiler" FORCE)
set(ENABLE_DATA_MYSQL ON CACHE BOOL "Enable MySQL" FORCE)

add_subdirectory(external/POCO)

add_executable(application
    include/customer_dao.hpp
    include/customer.hpp
    include/scope_guard.hpp
    src/customer_dao.cpp
    src/customer.cpp
    src/main.cpp)
target_include_directories(application PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
target_link_libraries(application PRIVATE Poco::Data Poco::DataMySQL)
`

Пытался собрать его и ожидал, что он найдет MariaDB и заработает, но этого не произошло.

Обновлено: Чтобы добавить больше ясности в сообщение

Получите сообщение об ошибке «MariaDB не найдено», которое мы и вывели. Предполагалось, что POCO позаботится об объявленных нами переменных, а затем узнает, как использовать MariaDB и где найти MariaDB.

MYSQL_ROOT_DIR — установить корневой путь установки, где найти путь включения и библиотеки MySQL или MariaDB.

MYSQL_ROOT_INCLUDE_DIRS — установить пути, по которым можно найти заголовки MySQL или MariaDB.

MYSQL_ROOT_LIBRARY_DIRS — установите пути к библиотекам, где можно найти библиотеки MySQL или MariaDB.

Это пути, на которые предположительно смотрит POCO. https://docs.pocoproject.org/current/00200-GettingStarted.html Если мы сможем установить их правильно, возможно, мы сможем найти MariaDB.

«не сработало» — это не описание проблемы, с которой мы могли бы вам помочь. Объясните, пожалуйста, что именно не работает. Например. покажите сообщение об ошибке, которое вы получили. Кстати, вы определяете переменные MARIADB_INCLUDE_DIR и MARIADB_LIB, которые описывают MariaDB, но никогда не используете эти переменные.

Tsyvarev 21.07.2024 16:28

Здравствуйте, я получаю сообщение «MariaDB не найдена». Да, от set(MARIADB_DIR "C:/Program Files/MariaDB 10.5") до endif (), я не был на 100% уверен, что написать, чтобы включить MariaDB. Не удалось найти много документации по этому вопросу в Интернете.

user21974243 21.07.2024 16:37

Если это хоть немного полезно, папка MariaDB имеет такую ​​структуру каталогов ссылка

user21974243 21.07.2024 16:43

Использование mariadb в качестве имени для find_library означает, что вы хотите найти файл с именем mariadb.lib или libmariadb.lib. Есть ли у вас один из этих файлов в подкаталоге lib/? Если нет, то вам следует исправить вызов find_library.

Tsyvarev 21.07.2024 17:39

@Tsyvarev Да, в подкаталоге lib/ есть файл libmariadb.dll.

user21974243 22.07.2024 00:07

Отредактировал пост, чтобы внести в него немного больше ясности

user21974243 22.07.2024 00:09

Даже если вы используете общую библиотеку MariaDB (.dll), у вас все равно должна быть .lib. Именно .lib файл ищется find_library и именно .lib следует использовать для ссылки. .dll используется только во время выполнения.

Tsyvarev 22.07.2024 00:21

Да, вы правы, в каталоге lib тоже есть файл libmariadb.lib, я случайно скопировал и вставил имя файла .dll в предыдущем сообщении, так как у него было то же имя (моя ошибка). Скриншот того, что я вижу ibb.co/s3kTTsT

user21974243 22.07.2024 01:13

При запуске cmake для настройки проекта добавьте для него опцию --debug-find. Таким образом, CMake напечатает, какие файлы и каталоги просматриваются во время команды find_library.

Tsyvarev 22.07.2024 01:17

Спасибо за советы, у меня должно быть время, чтобы попробовать еще раз на этой неделе и рассчитывать на больший прогресс.

user21974243 22.07.2024 08:29
Стоит ли изучать 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 называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
10
52
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Похоже, вы установили MariaDB Server без компонента разработки (который содержит заголовочные файлы и библиотеки). Файла .dll недостаточно, для связывания вам потребуются символы из файлов .lib.

Также обратите внимание, что включаемые файлы хранятся не в ${MARIADB_DIR}/include, а в ${MARIADB_DIR}/include/mysql.

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