Can't build agent because of fmt

Open
#255 7 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
38/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Quiet
Tech stack
cpp
Domain
build-system

Research direction

Start by reproducing the Jazzy build with build_agent.sh and inspect InterfaceLinux.hpp around line 63, where the fmt/spdlog error is instantiated. Trace which fmt and spdlog installations the build selects, then verify that the micro-ROS Agent builds and remains compatible with the reported linorobot2 setup.

Written by the indexing model from the issue text.

Description

  • Hardware description: Personnal computer running Ubuntu 24.04
  • Installation type: Micro-ros-setup, colcon-build, snap
  • Version or commit hash: jazzy
  • Current spdlog version: 1.15.0

Context:
I'm building a ros2 package based on linorobot2 which requires micro ros agent.

Behavior

Following the installation tutorial, I execute the ros2 run build_agent.sh command and get this error:

In file included from /home/darkadius/anaconda3/include/fmt/format.h:41,
                 from /home/darkadius/anaconda3/include/fmt/core.h:5,
                 from /home/darkadius/anaconda3/include/spdlog/fmt/fmt.h:28,
                 from /home/darkadius/anaconda3/include/spdlog/common.h:50,
                 from /home/darkadius/anaconda3/include/spdlog/spdlog.h:12,
                 from /home/darkadius/ros2_ws/build/micro_ros_agent/agent/src/xrceagent/include/uxr/agent/logger/Logger.hpp:23,
                 from /home/darkadius/ros2_ws/build/micro_ros_agent/agent/src/xrceagent/include/uxr/agent/transport/SessionManager.hpp:18,
                 from /home/darkadius/ros2_ws/build/micro_ros_agent/agent/src/xrceagent/include/uxr/agent/transport/Server.hpp:20,
                 from /home/darkadius/ros2_ws/build/micro_ros_agent/agent/src/xrceagent/include/uxr/agent/transport/tcp/TCPv6AgentLinux.hpp:19,
                 from /home/darkadius/ros2_ws/build/micro_ros_agent/agent/src/xrceagent/src/cpp/transport/tcp/TCPv6AgentLinux.cpp:15:

/home/darkadius/anaconda3/include/fmt/base.h: In instantiation of ‘fmt::v11::detail::value<Context>::value(const T&, fmt::v11::detail::custom_tag) [with T = dds::xrce::TransportAddress; typename std::enable_if<(! has_formatter<T, typename Context::char_type>()), int>::type <anonymous> = 0; Context = fmt::v11::context]’:
/home/darkadius/anaconda3/include/fmt/base.h:2208:65:   required from ‘fmt::v11::detail::value<Context>::value(T&) [with T = dds::xrce::TransportAddress; typename std::enable_if<(std::integral_constant<bool, (((((((std::is_class<T>::value || std::is_enum<T>::value) || std::is_union<T>::value) || std::is_array<_Up>::value) && (! fmt::v11::detail::has_to_string_view<T, void>::value)) && (! fmt::v11::detail::is_named_arg<T>::value)) && (! fmt::v11::detail::use_format_as<T>::value)) && (! fmt::v11::detail::use_format_as_member<typename std::remove_const<T>::type, std::integral_constant<bool, true> >::value))>::value || (!1)), int>::type <anonymous> = 0; Context = fmt::v11::context]’
/home/darkadius/anaconda3/include/fmt/base.h:2781:20:   required from ‘constexpr fmt::v11::detail::format_arg_store<Context, NUM_ARGS, NUM_NAMED_ARGS, DESC> fmt::v11::make_format_args(T& ...) [with Context = context; T = {const char [24], dds::xrce::TransportAddress}; int NUM_ARGS = 2; int NUM_NAMED_ARGS = 0; long long unsigned int DESC = 252]’
/home/darkadius/anaconda3/include/spdlog/logger.h:328:75:   required from ‘void spdlog::logger::log_(spdlog::source_loc, spdlog::level::level_enum, spdlog::string_view_t, Args&& ...) [with Args = {const char (&)[24], dds::xrce::TransportAddress&}; spdlog::string_view_t = fmt::v11::basic_string_view<char>]’
/home/darkadius/anaconda3/include/spdlog/logger.h:80:13:   required from ‘void spdlog::logger::log(spdlog::source_loc, spdlog::level::level_enum, fmt::v11::format_string<T ...>, Args&& ...) [with Args = {const char (&)[24], dds::xrce::TransportAddress&}; fmt::v11::format_string<T ...> = fmt::v11::fstring<const char (&)[24], dds::xrce::TransportAddress&>]’
/home/darkadius/ros2_ws/build/micro_ros_agent/agent/src/xrceagent/include/uxr/agent/transport/util/InterfaceLinux.hpp:63:17:   required from here

/home/darkadius/anaconda3/include/fmt/base.h:2235:45: error: ‘fmt::v11::detail::type_is_unformattable_for<dds::xrce::TransportAddress, char> _’ has incomplete type
 2235 |     type_is_unformattable_for<T, char_type> _;
Solutions tried:

-Downgrading spdlog: Jazzy's rclpy requires spdlog 1.15.0
-Building libfmt from source from here : Gives the above error as the new libfmt wasn't detected
-Using the DUAGENT flag (both on/off) from here : Still gives me the above error
-Using the snap version from here : The package does build successfully, however, the only micro-ros-agent package on snap was the foxy version, which causes fatal compatibility issues upon launching the linorobot2 package

It feels like I've tried everything short of a complete ros2/ubuntu reinstall (which I'd like to avoid, obviously). Does anyone has some advice?

Dominant language
C++
Stars
201
Forks
111
Avg merge
1d 6h
Merged PRs (30d)
10

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from micro-ROS/micro-ROS-Agent

All issues in micro-ROS/micro-ROS-Agent

Similar issues

More C++ issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.