osrf/osrf_testing_tools_cpp

Update to latest binutils

Globibluk opened this issue · 8 comments

Latest ROS2 build attempt throws « bfd_get_section_size » is not declared in this scope.
It looks like the function changed.
Same error for bfd_get_section_flags and bfd_get_section_vma.

It seems to work fine for me. Can you provide more information?

Oh yeah of course, sorry I missed the essential info.
I'm working on latest Manjaro, using the 2.34-1.1 binutils version.
I followed the steps from the official ROS2 wiki.
Please tell me if you need more info.

I was able to reproduce under the following conditions:

  • Ubuntu 20 Focal (through docker)
  • Installed binutils-dev 2.34-4ubuntu1 (just installing binutils 2.34-4ubuntu1 works fine)
colcon build output
root@7a6c9d41aecc:~/ws# colcon build --packages-up-to test_osrf_testing_tools_cpp
Starting >>> osrf_testing_tools_cpp
--- stderr: osrf_testing_tools_cpp                              
In file included from /root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/./stack_trace_impl.hpp:31,
                 from /root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/memory_tools_service.cpp:20:
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp: In member function ‘void backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::find_in_section(bfd_vma, bfd_vma, backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::bfd_fileobject&, asection*, backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::find_sym_result&)’:
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1192:10: error: ‘bfd_get_section_flags’ was not declared in this scope; did you mean ‘bfd_set_section_flags’?
 1192 |     if ((bfd_get_section_flags(fobj.handle.get(), section)
      |          ^~~~~~~~~~~~~~~~~~~~~
      |          bfd_set_section_flags
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1196:24: error: ‘bfd_get_section_vma’ was not declared in this scope; did you mean ‘bfd_set_section_vma’?
 1196 |     bfd_vma sec_addr = bfd_get_section_vma(fobj.handle.get(), section);
      |                        ^~~~~~~~~~~~~~~~~~~
      |                        bfd_set_section_vma
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1197:26: error: ‘bfd_get_section_size’ was not declared in this scope; did you mean ‘bfd_set_section_size’?
 1197 |     bfd_size_type size = bfd_get_section_size(section);
      |                          ^~~~~~~~~~~~~~~~~~~~
      |                          bfd_set_section_size
In file included from /root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/./print_backtrace.hpp:26,
                 from /root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/custom_memory_functions.cpp:30:
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp: In member function ‘void backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::find_in_section(bfd_vma, bfd_vma, backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::bfd_fileobject&, asection*, backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::find_sym_result&)’:
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1192:10: error: ‘bfd_get_section_flags’ was not declared in this scope; did you mean ‘bfd_set_section_flags’?
 1192 |     if ((bfd_get_section_flags(fobj.handle.get(), section)
      |          ^~~~~~~~~~~~~~~~~~~~~
      |          bfd_set_section_flags
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1196:24: error: ‘bfd_get_section_vma’ was not declared in this scope; did you mean ‘bfd_set_section_vma’?
 1196 |     bfd_vma sec_addr = bfd_get_section_vma(fobj.handle.get(), section);
      |                        ^~~~~~~~~~~~~~~~~~~
      |                        bfd_set_section_vma
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1197:26: error: ‘bfd_get_section_size’ was not declared in this scope; did you mean ‘bfd_set_section_size’?
 1197 |     bfd_size_type size = bfd_get_section_size(section);
      |                          ^~~~~~~~~~~~~~~~~~~~
      |                          bfd_set_section_size
In file included from /root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/./stack_trace_impl.hpp:31,
                 from /root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/stack_trace.cpp:17:
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp: In member function ‘void backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::find_in_section(bfd_vma, bfd_vma, backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::bfd_fileobject&, asection*, backward::TraceResolverLinuxImpl<backward::trace_resolver_tag::libbfd>::find_sym_result&)’:
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1192:10: error: ‘bfd_get_section_flags’ was not declared in this scope; did you mean ‘bfd_set_section_flags’?
 1192 |     if ((bfd_get_section_flags(fobj.handle.get(), section)
      |          ^~~~~~~~~~~~~~~~~~~~~
      |          bfd_set_section_flags
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1196:24: error: ‘bfd_get_section_vma’ was not declared in this scope; did you mean ‘bfd_set_section_vma’?
 1196 |     bfd_vma sec_addr = bfd_get_section_vma(fobj.handle.get(), section);
      |                        ^~~~~~~~~~~~~~~~~~~
      |                        bfd_set_section_vma
make[2]: *** [src/memory_tools/CMakeFiles/memory_tools.dir/build.make:115: src/memory_tools/CMakeFiles/memory_tools.dir/memory_tools_service.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/root/ws/osrf/osrf_testing_tools_cpp/osrf_testing_tools_cpp/src/memory_tools/././vendor/bombela/backward-cpp/backward.hpp:1197:26: error: ‘bfd_get_section_size’ was not declared in this scope; did you mean ‘bfd_set_section_size’?
 1197 |     bfd_size_type size = bfd_get_section_size(section);
      |                          ^~~~~~~~~~~~~~~~~~~~
      |                          bfd_set_section_size
make[2]: *** [src/memory_tools/CMakeFiles/memory_tools.dir/build.make:63: src/memory_tools/CMakeFiles/memory_tools.dir/custom_memory_functions.cpp.o] Error 1
make[2]: *** [src/memory_tools/CMakeFiles/memory_tools.dir/build.make:154: src/memory_tools/CMakeFiles/memory_tools.dir/stack_trace.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:1090: src/memory_tools/CMakeFiles/memory_tools.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [Makefile:141: all] Error 2
---
Failed   <<< osrf_testing_tools_cpp     [ Exited with code 2 ]

Summary: 0 packages finished [4.96s]
  1 package failed: osrf_testing_tools_cpp
  1 package had stderr output: osrf_testing_tools_cpp
  1 package not processed

As described here, if binutils-dev is installed, libbfd is used. Therefore BACKWARD_HAS_BFD=1 and bfd_get_section_size/others are called.

So the issue is actually in backward. Looks like they are aware of it bombela/backward-cpp#155

Ok thanks for the tip!

If you need to get it working, you could try the fix in the linked PR above.

oh wait there's already a PR right here: #40

Yeap it seems to build, thanks!

Closed in favor of #45.