spdlog
spdlog copied to clipboard
cannot bind non-const lvalue reference of type ‘string&’ to an rvalue of type ‘string’
I keep getting this error when building with cmake and i cant figure out what is happening
make[2]: Entering directory '/home/iulian/dev/minecraft-server/build'
[ 29%] Building CXX object dependencies/SFW/src/CMakeFiles/SFW.dir/Connection.cpp.o
cd /home/iulian/dev/minecraft-server/build/dependencies/SFW/src && /usr/bin/g++ -DSFW_EXPORTS -DSPDLOG_COMPILED_LIB -DSPDLOG_USE_STD_FORMAT -I/home/iulian/dev/minecraft-server/dependencies/SFW/include/SFW -I/home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include -g -std=gnu++20 -fPIC -MD -MT dependencies/SFW/src/CMakeFiles/SFW.dir/Connection.cpp.o -MF CMakeFiles/SFW.dir/Connection.cpp.o.d -o CMakeFiles/SFW.dir/Connection.cpp.o -c /home/iulian/dev/minecraft-server/dependencies/SFW/src/Connection.cpp
In file included from /home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include/spdlog/spdlog.h:14,
from /home/iulian/dev/minecraft-server/dependencies/SFW/include/SFW/Logger.h:3,
from /home/iulian/dev/minecraft-server/dependencies/SFW/include/SFW/Connection.h:12,
from /home/iulian/dev/minecraft-server/dependencies/SFW/src/Connection.cpp:6:
/home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include/spdlog/logger.h: In instantiation of ‘void spdlog::logger::log_(spdlog::source_loc, spdlog::level::level_enum, spdlog::string_view_t, Args&& ...) [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; spdlog::string_view_t = std::basic_string_view<char>]’:
/home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include/spdlog/logger.h:90:13: required from ‘void spdlog::logger::log(spdlog::source_loc, spdlog::level::level_enum, spdlog::format_string_t<Args ...>, Args&& ...) [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; spdlog::format_string_t<Args ...> = std::basic_string_view<char>]’
/home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include/spdlog/logger.h:96:12: required from ‘void spdlog::logger::log(spdlog::level::level_enum, spdlog::format_string_t<Args ...>, Args&& ...) [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; spdlog::format_string_t<Args ...> = std::basic_string_view<char>]’
/home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include/spdlog/logger.h:170:12: required from ‘void spdlog::logger::error(spdlog::format_string_t<Args ...>, Args&& ...) [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; spdlog::format_string_t<Args ...> = std::basic_string_view<char>]’
/home/iulian/dev/minecraft-server/dependencies/SFW/include/SFW/Logger.h:49:28: required from ‘void iu::Logger::error(spdlog::format_string_t<Args ...>, Args&& ...) const [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >}; spdlog::format_string_t<Args ...> = std::basic_string_view<char>]’
/home/iulian/dev/minecraft-server/dependencies/SFW/include/SFW/Connection.h:83:31: required from here
/home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include/spdlog/logger.h:372:88: error: cannot bind non-const lvalue reference of type ‘std::__cxx11::basic_string<char>&’ to an rvalue of type ‘std::__cxx11::basic_string<char>’
372 | fmt_lib::vformat_to(std::back_inserter(buf), fmt, fmt_lib::make_format_args(std::forward<Args>(args)...));
| ~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/include/c++/13/bits/chrono_io.h:39,
from /usr/include/c++/13/chrono:3370,
from /home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include/spdlog/common.h:10,
from /home/iulian/dev/minecraft-server/dependencies/SFW/dependencies/spdlog/include/spdlog/spdlog.h:12:
/usr/include/c++/13/format:3411:28: note: initializing argument 1 of ‘auto std::make_format_args(_Args& ...) [with _Context = basic_format_context<__format::_Sink_iter<char>, char>; _Args = {__cxx11::basic_string<char, char_traits<char>, allocator<char> >}]’
3411 | make_format_args(_Args&... __fmt_args) noexcept
| ~~~~~~^~~~~~~~~~~~~~
make[2]: *** [dependencies/SFW/src/CMakeFiles/SFW.dir/build.make:76: dependencies/SFW/src/CMakeFiles/SFW.dir/Connection.cpp.o] Error 1
make[2]: Leaving directory '/home/iulian/dev/minecraft-server/build'
make[1]: *** [CMakeFiles/Makefile2:195: dependencies/SFW/src/CMakeFiles/SFW.dir/all] Error 2
make[1]: Leaving directory '/home/iulian/dev/minecraft-server/build'
make: *** [Makefile:91: all] Error 2
My project structure goes like this.
And these are the cmake files.
cmake_minimum_required(VERSION 3.27.7)
project(SFW VERSION 0.1)
include(ExternalProject)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)
set(SPDLOG_USE_STD_FORMAT ON)
add_subdirectory(dependencies/spdlog)
add_subdirectory(src)
add_library(SFW_EXPORT INTERFACE)
add_library(SFW::SFW ALIAS SFW_EXPORT)
target_include_directories(SFW_EXPORT
INTERFACE ${PROJECT_SOURCE_DIR}/include)
target_compile_features(SFW_EXPORT
INTERFACE cxx_std_20)
target_compile_definitions(SFW_EXPORT
INTERFACE SPDLOG_USE_STD_FORMAT=1)
target_link_libraries(SFW_EXPORT
INTERFACE spdlog::spdlog_header_only
INTERFACE SFW)
add_library(${PROJECT_NAME} SHARED
Connection.cpp
Logger.cpp
LoggerManager.cpp
Server.cpp
ServerConnectionHandler.cpp
Socket.cpp
SocketDescriptor.cpp
ThreadPool.cpp
utils.cpp)
#includes main.cpp for when i want to test stuff
add_executable(${PROJECT_NAME}-test
main.cpp
)
target_include_directories(${PROJECT_NAME}
PRIVATE ${PROJECT_SOURCE_DIR}/include/SFW)
target_link_libraries(${PROJECT_NAME} PRIVATE spdlog::spdlog_header_only)
target_include_directories(${PROJECT_NAME}-test
PRIVATE ${PROJECT_SOURCE_DIR}/include/SFW)
target_link_libraries(${PROJECT_NAME}-test
PRIVATE ${PROJECT_NAME})
cmake_minimum_required(VERSION 3.27.7)
project(mc-server)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/$<CONFIG>/)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/out/$<CONFIG>/)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
add_subdirectory(dependencies/SFW)
add_subdirectory(dependencies/nlohmann-json)
add_subdirectory(src)
target_include_directories(${PROJECT_NAME}
PRIVATE include/
PRIVATE dependencies/nlohmann-json/single_include)
target_link_libraries(${PROJECT_NAME} PRIVATE SFW::SFW)
set_property(TARGET SFW PROPERTY CXX_STANDARD 20)
add_executable(${PROJECT_NAME}
main.cpp
MinecraftHandler.cpp
PlayerHandler.cpp
ServerPackets.cpp
utils.cpp
DataTypes/Identifier.cpp
DataTypes/nbt.cpp)
I hope i am not completely misusing cmake though