如何在 Windows 上使用 C++ 将 MariaDB 与 POCO (https://pocoproject.org/) 结合使用。就像我如何在 CMake 中链接 MariaDB 库等

问题描述 投票:0回答:1

这是我第一次尝试将 MariaDB 链接到 CMake 中的 C++ 程序

MariaDB 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 not found”,这是我们输出的内容。假设 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。

c++ cmake mariadb poco-libraries
1个回答
0
投票

看起来您安装的 MariaDB Server 没有开发组件(包含头文件和库)。 .dll 还不够,为了链接,您将需要 .lib 文件中的符号。

另请注意,包含文件不存储在

${MARIADB_DIR}/include
中,而是存储在
${MARIADB_DIR}/include/mysql

© www.soinside.com 2019 - 2024. All rights reserved.