Подключить MariaDB на С++

113
15 ноября 2020, 09:50

IDE CLion может переходить в библиотеку #include <mariadb/mysql.h>, то есть, файл найден, однако проект не компилируется: /home/nerd/CLionProjects/ISPstats/main.cpp:8: undefined reference tomysql_init'`. Добавил в cmake

include_directories(/usr/lib/mysql mariadb)
target_link_libraries(${PROJECT_NAME} mariadb)

Теперь программа, не дойдя до main, падает с сообщением Process finished with exit code 139 (interrupted by signal 11: SIGSEGV).

В чем может быть проблема и как подключить таки библиотеку? Есть подозрение, что распаковывать файл коннектора MariaDB и кидать в /usr/lib/mysql было не очень хорошей идеей, но ничего другого придумать не могу.

Полный код приложения:

#include <iostream>
#include <mariadb/mysql.h>
int main(){
    std::cout<<"start";
    MYSQL conn;
    std::cout<< "MYSQL conn;";
    if(!mysql_init(&conn)){
        std::cout<<"Error create MySQL descriptor";
    }
 if(!mysql_real_connect(&conn,"localhost","stats","q1w2e3r4","statsDB",3306,NULL,0)){
        std::cout<<"Error connection";
    }
    return 0;
}

CmakeLists.txt:

cmake_minimum_required(VERSION 3.10)
project(ISPstats)
set(CMAKE_CXX_STANDARD 17)
if ("${CMAKE_CXX_COMPILER_ID}" MATCHES "Clang")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
endif()
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()
include_directories(/usr/lib/mysql mariadb)
add_executable(${PROJECT_NAME} main.cpp)
target_link_libraries(${PROJECT_NAME} ${CONAN_LIBS})
target_link_libraries(${PROJECT_NAME} mariadb)

Нашел пример тут, однако CMake ругается на

CMake Error at CMakeLists.txt:17 (find_package):
  By not providing "FindMariaDBClient.cmake" in CMAKE_MODULE_PATH this
  project has asked CMake to find a package configuration file provided by
  "MariaDBClient", but CMake did not find one.
  Could not find a package configuration file provided by "MariaDBClient"
  with any of the following names:
    MariaDBClientConfig.cmake
    mariadbclient-config.cmake
  Add the installation prefix of "MariaDBClient" to CMAKE_PREFIX_PATH or set
  "MariaDBClient_DIR" to a directory containing one of the above files.  If
  "MariaDBClient" provides a separate development package or SDK, be sure it
  has been 

Установлены mariadb-server, mariadb-client, libmariadb и libmariadb-dev, не знаю, что еще можно сделать.

Answer 1

Примеры коннектора mariadb лежат тут. Собираю examples, после команды cmake нужно найти файл CMakeFiles/mysql_debug.dir/link.txt и заменить lmysql.h на -lmariadb. Судя по данному решению, если бы я использовал mySQL, такой проблемы бы не было

READ ALSO
Сортировка списка фамилий

Сортировка списка фамилий

Это мой код по сортировке фамилий, Входят фамилии, пробегаются по функции Алфавит, и потом им присваивается соответствующее значение в массиве

106
Работа с двумя объектами из одной функции

Работа с двумя объектами из одной функции

Так происходит работа с двумя формами из разных функций

115
Можно ли конвертировать HTML + СSS в SVG или gif?

Можно ли конвертировать HTML + СSS в SVG или gif?

Есть прелоэдер свёрстаный на html и сss, с анимацией (@keyframes), можно ли его как то легко, желательно автоматически, с помощью какой нибудь программы,преобразовать...

122