C++ SPDLOG 编译错误:变量或字段“set_error_handler”声明为无效

Posted

技术标签:

【中文标题】C++ SPDLOG 编译错误:变量或字段“set_error_handler”声明为无效【英文标题】:C++ SPDLOG compilation error: variable or field ‘set_error_handler’ declared void 【发布时间】:2017-07-26 09:09:23 【问题描述】:

我正在尝试在我的项目中使用 spdlog。根据spdlog docu,我只需要复制include文件夹下的文件并使用C++ 11编译器。

我将 /include/spdlog 文件夹复制到我的项目根文件夹,但在尝试构建项目后我遇到了很多错误。有些是ff:

/home/project/Documents/project-server/spdlog/spdlog.h:46:39: error: variable or field ‘set_error_handler’ declared void
void set_error_handler(log_err_handler);
                                   ^
/home/project/Documents/project-server/spdlog/spdlog.h:46:24: error: ‘log_err_handler’ was not declared in this scope
 void set_error_handler(log_err_handler);
                    ^
In file included from /home/project/Documents/project-server/main.cpp:13:0:
/home/project/Documents/project-server/spdlog/spdlog.h:74:79: error: ‘filename_t’ does not name a type
 std::shared_ptr<logger> basic_logger_mt(const std::string& logger_name, const filename_t& filename, bool truncate = false);
                                                                           ^
/home/project/Documents/project-server/spdlog/spdlog.h:75:79: error: ‘filename_t’ does not name a type
 std::shared_ptr<logger> basic_logger_st(const std::string& logger_name, const filename_t& filename, bool truncate = false);
                                                                           ^
/home/project/Documents/project-server/spdlog/spdlog.h:80:82: error: ‘filename_t’ does not name a type
 std::shared_ptr<logger> rotating_logger_mt(const std::string& logger_name, const filename_t& filename, size_t max_file_size, size_t max_files);

我尝试在 CMakeLists.txt 中添加以下内容

target_include_directories(ProjectName INTERFACE spdlog)

include_directories(spdlog)

target_link_libraries(ProjectName .... -libspdlog-dev)

(我安装了 libspdlog-dev)

add_subdirectory(spdlog)

但以上都不起作用。有谁知道我该如何解决这个问题?非常感谢!

【问题讨论】:

【参考方案1】:

如spdlogs docu at the very bottom中所写,你可以做一个

find_package(spdlog CONFIG)

这为您提供了导入的接口库spdlog::spdlog,您可以使用它

target_link_library(my_library PUBLIC spdlog::spdlog)

(见spdlog/examples/CMakeLists.txt)

【讨论】:

【参考方案2】:

解决方案是安装 spdlog:

sudo apt-get install libspdlog-dev

并包括使用:

#include <spglog/spdlog.h>

我最初只是将 spdlog 复制到我的项目根目录并尝试使用:

#include "spdlog/spdlog.h"

【讨论】:

以上是关于C++ SPDLOG 编译错误:变量或字段“set_error_handler”声明为无效的主要内容,如果未能解决你的问题,请参考以下文章

通过复制包含目录的内容来安装 spdlog

使用 spdlog (C++) 记录,记录器未将日志写入文件

C ++接收纯虚函数错误,“变量或字段'x'声明为void”[关闭]

如何使用 spdlog

python编译错误(绑定c++)

spdlog源码分析