我是靠谱客的博主 负责天空,最近开发中收集的这篇文章主要介绍spdlog linux编译出错,spdlog在工厂方法上崩溃,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

昨天我已经开始将spdlog包含到我的个人项目中以进行日志记录。 到目前为止,我在使库包含工作时遇到了一些问题,但是现在已经完全解决了。

现在,一切都可以正常编译,找到所有标头,但是当我尝试创建记录器或只是设置记录模式时,由于段错误而导致代码崩溃。 更具体地说,无论我第一次在程序中从spdlog命名空间调用哪个函数都会导致崩溃。

我有一个类,它从spdlog提取一些部分(基于此 spdlog ),如下所示://Logger.hpp

#ifndef TE_LOGGER_HPP

#define TE_LOGGER_HPP

#include

namespace te {

class Logger {

public:

static void Init();

inline static std::shared_ptr<:logger> &getCoreLogger() {

return sCoreLogger;

}

inline static std::shared_ptr<:logger> &getClientLogger() {

return sClientLogger;

}

private:

static std::shared_ptr<:logger> sCoreLogger;

static std::shared_ptr<:logger> sClientLogger;

};

}

#endif //TE_LOGGER_HPP

//Logger.cpp

#include "Logger.hpp"

#include

std::shared_ptr<:logger> te::Logger::sCoreLogger;

std::shared_ptr<:logger> te::Logger::sClientLogger;

void te::Logger::Init() {

//The first of any of the following three lines cause a crash

//no matter the order, regardless of the pattern used in set_pattern

spdlog::set_pattern("%v");

sCoreLogger = spdlog::stdout_color_mt("CORE");

sClientLogger = spdlog::stdout_color_mt("CORE");

sCoreLogger->set_level(spdlog::level::trace);

sClientLogger->set_level(spdlog::level::trace);

}

从堆栈跟踪来看,问题似乎出在spdlog的formatter类由于某种原因在库中设置为null 。 我正在使用最新的CLion C ++ 14(我知道spdlog是C ++ 11,但是稍后需要14中的功能,同时设置-std = c ++ 11不能解决问题)以及截至昨日的最新版本的spdlog (直接从其GitHub存储库中提取)在Ubuntu 18.04上。

编辑:根据注释中的请求,我创建了一个小项目(单个cpp文件,以我在真实项目中的方式包含spdlog ,或者与从main.cpp文件引用的真实项目中相同的代码和库设置并spdlog相关联)旨在重现该问题,这是我的发现:*当我直接在可执行文件中使用spdlog时,此问题不存在*如果将Logger类移入共享库并链接到该库,则存在此问题那里

这是我收到的错误消息:Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)

和我正在使用的CMakeLists.txt文件(我将库的一个嵌套到项目中,因为到目前为止,CLion不像VS那样支持“同一解决方案中的多个项目”):#CMakeLists.txt,用于库cmake_minimum_required(VERSION 3.10 FATAL_ERROR)project(TokenEngine VERSION 0.0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 14)

set(SOURCE_FILES src/Application.cpp src/Application.hpp src/EntryPoint.hpp src/Logger.cpp src/Logger.hpp)

#include_directories("${CMAKE_CURRENT_SOURCE_DIR}/libs/")

add_library(TokenEngine SHARED ${SOURCE_FILES})

target_include_directories(TokenEngine PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/libs/spdlog-1.x/include")

#Expose the public API of the engine to any project that might use it

target_include_directories(TokenEngine PUBLIC include)

#CMakeLists.txt for top level project

cmake_minimum_required(VERSION 3.10 FATAL_ERROR)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra")

add_definitions(-DTE_PLATFORM_LINUX)

project(Build CXX)

add_subdirectory(TokenEngine)

add_subdirectory(Sandbox)

最后

以上就是负责天空为你收集整理的spdlog linux编译出错,spdlog在工厂方法上崩溃的全部内容,希望文章能够帮你解决spdlog linux编译出错,spdlog在工厂方法上崩溃所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(64)

评论列表共有 0 条评论

立即
投稿
返回
顶部