13. Utilisation de spdlog --- Comment utiliser spdlog dans une DLL

Problème
Étant donné que spdlog est une bibliothèque d'en-tête uniquement, la création d'une bibliothèque partagée et son utilisation dans le programme principal ne partageront pas le registre de l'enregistreur entre eux. Cela signifie que les appels à des fonctions telles que spdlog::set_level(spdlog::level::level_enum::info) ne modifieront pas le journaliseur dans la DLL.

Solution de contournement Ce que
vous pouvez faire est d'enregistrer l'enregistreur dans les deux registres.

// mylibrary.h
// 在库中,我们跳过了符号导出部分

#include <memory>
#include <vector>
#include <spdlog/spdlog.h>
#include <spdlog/logger.h>
#include <spdlog/sinks/stdout_color_sinks.h>

namespace library
{
static const std::string logger_name = "example";

std::shared_ptr<spdlog::logger> setup_logger(std::vector<spdlog::sink_ptr> sinks)
{
    auto logger = spdlog::get(logger_name);
    if (!logger)
    {
        if (sinks.size() > 0)
        {
            logger = std::make_shared<spdlog::logger>(logger_name,
                                                      std::begin(sinks),
                                                      std::end(sinks));
            spdlog::register_logger(logger);
    

Guess you like

Origin blog.csdn.net/Knowledgebase/article/details/132606812