昨天我已经开始将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在工厂方法上崩溃相关推荐

  1. spdlog linux编译出错,spdlog 基本结构分析

    spdlog 基本结构分析 代码取自 V1.5.0, 代码堪称美学. spdlog 是一个只有头文件的C++日志库,速度非常快,扩展性很强,更重要的是 社区活跃,文档齐全. 使用 {fmt} 的格式使 ...

  2. spdlog linux编译出错,【C++】spdlog--log4cxx有点笨重,试一试spdlog

    spdlog是什么linux Fast C++ logging library 按照官方介绍,是一个高性能的C++日志组件,支持跨平台,兼容 C++11.原来项目中使用的是log4cxx,我感受稍微有 ...

  3. spdlog linux编译出错,Linux下编写Makefile引入第三方库

    Linux下编写Makefile引入第三方库 前言:一直在使用CmakaList 生成Makefile文件,其实很少去写Makefile,但是最近帮朋友处理了一个Makefile引入第三方库的问题,就 ...

  4. spdlog linux编译出错,c++日志库spdlog

    /*需要包含的头文件*/ #include "spdlog/spdlog.h" #include // EXIT_FAILURE #include #include void as ...

  5. Linux编译遇到各种错误解决方法,例如 /lib/modules/3.10.0-(xxx).el7.x86_64/build: No such file or directory. Stop.

    Linux编译遇到各种错误解决方法,例如: /lib/modules/3.10.0-(xxx).el7.x86_64/build: No such file or directory. Stop. 背 ...

  6. arm64位编译出错:aarch64-linux-android/bin\ld: unrecognized option '--fix-cortex-a53-843419' 的解决方法

    一.问题出现: 在NDK R10C上利用一个改造过的安全编译器clang编译一个arm64位so: 报错: 无法识别GCC链接器中的unrecognized option '--fix-cortex- ...

  7. 工厂方法模式与抽象工厂模式

    本文是转的 一.引子        话说十年前,有一个暴发户,他家有三辆汽车--Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说&quo ...

  8. Java设计模式之(工厂模式)--简单工厂模式--工厂方法模式--抽象工厂模式

    工厂模式: 工厂模式可以分为三类: 1)简单工厂模式(Simple Factory) 2)工厂方法模式(Factory Method) 3)抽象工厂模式(Abstract Factory) 简单工厂模 ...

  9. 简单工厂模式+工厂方法模式

    在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一 ...

最新文章

  1. 1/3 常用符号:类型说明符
  2. 服务器上的电脑登不上oracle,Oracle服务器改计算机名后报错之解决方法
  3. 【图像超分辨率论文】BasicVSR++: Improving Video Super-Resolution with Enhanced Propagation and Alignment
  4. java线程安全问题原因及解决办法
  5. MySQL、MongoDB、列数据库的区别及应用场景
  6. 使用webpack前端重构感受
  7. 电子测量与仪器第四版pdf_电子技术经典资料汇总:模电篇800M
  8. 【原创工具】蓝牙串口无线烧写STM32程序的工具,支持HC-05和CC2541两种蓝牙模块
  9. 记账系统推荐金蝶精斗云_金蝶精斗云好用的免费的财务做账软件有哪些?
  10. 用计算机算加班,加班工资计算器
  11. 虚函数表和虚函数表指针的汇编分析
  12. 如何获得当前所在的DLL模块名称
  13. HBuilder 使用教程
  14. Nordic错误笔记
  15. 2019美团机器学习/数据挖掘算法实习生笔试 编程题修改矩阵
  16. Python基本语法学习小结
  17. 行业分析-全球与中国AI支援X光影像解决方案市场现状及未来发展趋势
  18. 计算机在音乐教学的应用论文,信息技术音乐论文,关于现代信息技术在音乐教学中的应用相关参考文献资料-免费论文范文...
  19. 若依框架----登录界面美化
  20. 文本分类流程及可能遇到的问题

热门文章

  1. riak mysql_[Translate] 从SQL数据库迁移到Riak
  2. 百度云盘群组下载,细节操作让你摸不着头脑?
  3. r 语言c函数,R语言常用函数详解
  4. Debian 8桌面安装Nvidia GTX960显卡驱动
  5. 非常适合新手使用的吉他调音软件!
  6. Android 高德地图添加线段纹理
  7. c语言引入指针的目的,指针,C语言指针完全攻略
  8. 戴尔服务器安装系统出现蓝屏重启,服务器安装系统蓝屏原因_dell服务器安装系统设计.docx...
  9. 元旦给计算机老师的贺卡,一年级元旦给老师的贺卡祝福语
  10. 真武三国java_2010年CPU第三季手机游戏风云榜TOP10名单