spdlog icon indicating copy to clipboard operation
spdlog copied to clipboard

cannot bind non-const lvalue reference of type ‘string&’ to an rvalue of type ‘string’

Open Iuliean opened this issue 8 months ago • 7 comments

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. image

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

Iuliean avatar Jun 24 '24 21:06 Iuliean