auto myLogger1 = std::make_shared<spdlog::sinks::daily_file_sink>("spdlog", "logs/log.txt", 0, 0);报错
时间: 2024-03-26 10:40:28 浏览: 15
这个错误可能是由于 `spdlog` 库没有被正确链接导致的。请确保你已经正确地将 `spdlog` 库链接到你的项目中。如果你使用的是 `CMake`,则需要在 `CMakeLists.txt` 文件中添加以下内容:
```cmake
find_package(spdlog REQUIRED)
target_link_libraries(YourProject PRIVATE spdlog::spdlog)
```
如果你手动编译 `spdlog` 库,则需要将其编译为静态库或动态库,并将其链接到你的项目中。请注意,在使用 `spdlog` 库之前,你需要包含 `spdlog` 的头文件:
```cpp
#include <spdlog/spdlog.h>
```
如果你已经正确链接了 `spdlog` 库,那么请检查你的日志文件路径是否正确。在这个例子中,日志文件应该被写入到 `logs/log.txt` 中。如果 `logs` 目录不存在,那么请先创建该目录。
相关问题
包含了spdlog的库且调用没有问题,但是 auto myLogger1 = std::make_shared<spdlog::sinks::daily_file_sink>("spdlog", "logs/log.txt", 0, 0);这一行代码会报错NO matching function for call to "make_shared"
如果你确定已经正确包含了 `spdlog` 库的头文件和链接了该库,但是仍然出现了 "NO matching function for call to `make_shared`" 的错误,那么可能是因为你使用的 `spdlog` 版本不同导致的。
在不同版本的 `spdlog` 中,可能存在不同的构造函数重载或函数签名,如果你的代码中使用了不兼容的函数签名或构造函数重载,就会出现这个错误。
你可以检查一下你使用的 `spdlog` 版本是否与你的代码兼容,如果不兼容,可以尝试升级或降级 `spdlog` 版本,或者修改你的代码以适应新的 `spdlog` 版本。另外,还可以尝试使用其他可用的构造函数或函数签名来创建 `daily_file_sink` 对象。
如果你仍然无法解决这个问题,请提供更多的代码和错误信息,这样我才能更好地帮助你。
/workspace/S2/qt/Deploy_infer/MySpdlog.h:35: error: could not convert 'myLogger1' from 'shared_ptr<spdlog::sinks::rotating_file_sink<std::mutex>>' to 'shared_ptr<spdlog::logger>' 35 | spdlog::set_default_logger(myLogger1); | ^~~~~~~~~ | | | shared_ptr<spdlog::sinks::rotating_file_sink<std::mutex>>
这个错误是因为 `spdlog::set_default_logger` 函数需要接受一个 `shared_ptr<spdlog::logger>` 类型的参数,而你传入了一个 `shared_ptr<spdlog::sinks::rotating_file_sink<std::mutex>>` 类型的参数。
这是因为 `spdlog::sinks::rotating_file_sink<std::mutex>` 是一个日志输出 sink 类型,而 `spdlog::logger` 是一个日志记录器类型。你需要在创建日志记录器时使用 `spdlog::logger` 类型,而不是 `spdlog::sinks::rotating_file_sink<std::mutex>` 类型。
你可以使用以下代码来创建一个日志记录器:
```cpp
auto myLogger1 = std::make_shared<spdlog::logger>("my_logger", std::make_shared<spdlog::sinks::rotating_file_sink_mt>("logs/log.txt", 1024 * 1024 * 5, 3));
```
这个代码会创建一个名为 "my_logger" 的日志记录器,它将日志输出到 `logs/log.txt` 文件中,日志文件大小限制为 5 MB,最多保留 3 个历史日志文件。然后,你可以将这个日志记录器设置为默认记录器:
```cpp
spdlog::set_default_logger(myLogger1);
```
这样就可以了。如果你有任何疑问,请随时问我。