bpftime icon indicating copy to clipboard operation
bpftime copied to clipboard

bpftime build issue during to boost process

Open Satyam-git-hub opened this issue 3 months ago • 6 comments

When building bpftime with GPU monitoring/attachment support (LLVM-15, CUDA 12.4, Boost 1.74.0, C++17, Clang 14), the build fails at the GPU attachment implementation phase (attach/nv_attach_impl) due to Boost.Process template instantiation errors.

Image

Environment

bpftime commit: 8585e14690816e46a1d84231efc643ef7dbf2d89

OS: Ubuntu 22.04 LTS (x86_64)

GCC/G++: 11.4.0 and Clang: 14.0.0

CMake: [output of cmake --version]

Boost: 1.74.0 (from libboost-all-dev)

CUDA: 12.4 (/usr/local/cuda-12.4)

LLVM: 15.0.7 (dev tools, PTX target enabled)

C++ Standard: 17 (-DCMAKE_CXX_STANDARD=17)

Other relevant packages: spdlog 1.15.2, Frida 16.1.2

cmake build was successful but during make I faced the boost process issues

Navigate to the bpftime root directory

cd bpftime

Build the main bpftime project first

mkdir -p build && cd build cmake .. -DBPFTIME_ENABLE_CUDA_ATTACH=1 -DBPFTIME_CUDA_ROOT=/usr/local/cuda-12.6 make -j$(nproc)

Satyam-git-hub avatar Aug 06 '25 14:08 Satyam-git-hub

It seems to be a bug of boost https://stackoverflow.com/questions/58147787/boostprocessenv-broken-on-ubuntu-19-04, try updating your boost version

Officeyutong avatar Aug 07 '25 06:08 Officeyutong

I tried the latest 1.88.0

Image

and 1.85.0

Image

But these errors still keep showing up

Satyam-git-hub avatar Aug 07 '25 07:08 Satyam-git-hub

I tried the latest 1.88.0

Image ### and 1.85.0 Image But these errors still keep showing up

I'm using boost 1.83 and everything works, can you try that version?

Officeyutong avatar Aug 07 '25 08:08 Officeyutong

Image

I tried with 1.83 and these errors are similar to the ones I faced with 1.85

Satyam-git-hub avatar Aug 07 '25 10:08 Satyam-git-hub

Image ### I tried with 1.83 and these errors are similar to the ones I faced with 1.85

Since I can't reproduce your compile issues, could you please create a docker image to reproduce it so I can investigate in it?

Officeyutong avatar Aug 10 '25 14:08 Officeyutong

[SOLVED]: solution at the bottom

I'm facing a similar problem during the build, on my machine and also using the ubuntu docker file provided by the bpfftime repo (I followed the Build and test guide from eunomia website to setup both)

This is the output from my machine, but it's the same of the docker:

Build output

In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:107:19: error: ‘is_wchar_t’ is not a class template
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/env.hpp:107:75: error: explicit specialization of non-template ‘boost::process::detail::is_wchar_t’
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                                                                           ^
/usr/include/boost/process/env.hpp:108:19: error: ‘is_wchar_t’ is not a class template
  108 | template<> struct is_wchar_t<env_append<wchar_t>>        : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/env.hpp:108:48: error: ‘boost::process::detail::is_wchar_t’ is not a template
  108 | template<> struct is_wchar_t<env_append<wchar_t>>        : std::true_type {};
      |                                                ^~
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/env.hpp:109:19: error: ‘is_wchar_t’ is not a class template
  109 | template<> struct is_wchar_t<env_reset<wchar_t>>         : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/env.hpp:109:47: error: ‘boost::process::detail::is_wchar_t’ is not a template
  109 | template<> struct is_wchar_t<env_reset<wchar_t>>         : std::true_type {};
      |                                               ^~
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/env.hpp:110:19: error: ‘is_wchar_t’ is not a class template
  110 | template<> struct is_wchar_t<basic_environment<wchar_t>> : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/env.hpp:110:55: error: ‘boost::process::detail::is_wchar_t’ is not a template
  110 | template<> struct is_wchar_t<basic_environment<wchar_t>> : std::true_type {};
      |                                                       ^~
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/env.hpp:114:8: error: ‘char_converter’ is not a class template
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/env.hpp:115:1: error: explicit specialization of non-template ‘boost::process::detail::char_converter’
  115 | {
      | ^
/usr/include/boost/process/env.hpp:124:8: error: ‘char_converter’ is not a class template
  124 | struct char_converter<wchar_t, env_set<char>>
      |        ^~~~~~~~~~~~~~

# I trimmed the output too long

/usr/include/boost/process/detail/traits/wchar_t.hpp:160:65: error: ‘boost::process::detail::char_converter’ is not a template
  160 | struct char_converter<wchar_t, std::initializer_list<std::string>>
      |                                                                 ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/basic_cmd.hpp:14,
                 from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/traits/wchar_t.hpp:175:8: error: ‘char_converter’ is not a class template
  175 | struct char_converter<wchar_t, std::vector<char* >>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/traits/wchar_t.hpp:175:50: error: ‘boost::process::detail::char_converter’ is not a template
  175 | struct char_converter<wchar_t, std::vector<char* >>
      |                                                  ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/basic_cmd.hpp:14,
                 from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/traits/wchar_t.hpp:192:8: error: ‘char_converter’ is not a class template
  192 | struct char_converter<wchar_t, std::initializer_list<char *>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/traits/wchar_t.hpp:192:60: error: ‘boost::process::detail::char_converter’ is not a template
  192 | struct char_converter<wchar_t, std::initializer_list<char *>>
      |                                                            ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/basic_cmd.hpp:14,
                 from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/traits/wchar_t.hpp:209:8: error: ‘char_converter’ is not a class template
  209 | struct char_converter<char, std::vector<std::wstring>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/traits/wchar_t.hpp:209:53: error: ‘boost::process::detail::char_converter’ is not a template
  209 | struct char_converter<char, std::vector<std::wstring>>
      |                                                     ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/basic_cmd.hpp:14,
                 from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/traits/wchar_t.hpp:224:8: error: ‘char_converter’ is not a class template
  224 | struct char_converter<char, std::initializer_list<std::wstring>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/traits/wchar_t.hpp:224:63: error: ‘boost::process::detail::char_converter’ is not a template
  224 | struct char_converter<char, std::initializer_list<std::wstring>>
      |                                                               ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/basic_cmd.hpp:14,
                 from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/traits/wchar_t.hpp:239:8: error: ‘char_converter’ is not a class template
  239 | struct char_converter<char, std::vector<wchar_t* >>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/traits/wchar_t.hpp:239:50: error: ‘boost::process::detail::char_converter’ is not a template
  239 | struct char_converter<char, std::vector<wchar_t* >>
      |                                                  ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/basic_cmd.hpp:14,
                 from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/traits/wchar_t.hpp:256:8: error: ‘char_converter’ is not a class template
  256 | struct char_converter<char, std::initializer_list<wchar_t * >>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/traits/wchar_t.hpp:256:61: error: ‘boost::process::detail::char_converter’ is not a template
  256 | struct char_converter<char, std::initializer_list<wchar_t * >>
      |                                                             ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/posix/basic_cmd.hpp:13,
                 from /usr/include/boost/process/detail/basic_cmd.hpp:20,
                 from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/shell.hpp:58:8: error: ‘is_wchar_t’ is not a class template
   58 | struct is_wchar_t<shell_> : is_wchar_t<boost::filesystem::path>
      |        ^~~~~~~~~~
/usr/include/boost/process/shell.hpp:58:25: error: ‘boost::process::detail::is_wchar_t’ is not a template
   58 | struct is_wchar_t<shell_> : is_wchar_t<boost::filesystem::path>
      |                         ^
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
In file included from /usr/include/boost/process/detail/posix/basic_cmd.hpp:13,
                 from /usr/include/boost/process/detail/basic_cmd.hpp:20,
                 from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/shell.hpp:58:39: error: expected template-name before ‘<’ token
   58 | struct is_wchar_t<shell_> : is_wchar_t<boost::filesystem::path>
      |                                       ^
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:42:19: error: ‘is_wchar_t’ is not a class template
   42 | template<> struct is_wchar_t<exe_setter_<wchar_t>> : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:42:49: error: ‘boost::process::detail::is_wchar_t’ is not a template
   42 | template<> struct is_wchar_t<exe_setter_<wchar_t>> : std::true_type {};
      |                                                 ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:46:8: error: ‘char_converter’ is not a class template
   46 | struct char_converter<char, exe_setter_<wchar_t>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:46:48: error: ‘boost::process::detail::char_converter’ is not a template
   46 | struct char_converter<char, exe_setter_<wchar_t>>
      |                                                ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:55:8: error: ‘char_converter’ is not a class template
   55 | struct char_converter<wchar_t, exe_setter_<char>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:55:48: error: ‘boost::process::detail::char_converter’ is not a template
   55 | struct char_converter<wchar_t, exe_setter_<char>>
      |                                                ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:96:19: error: ‘is_wchar_t’ is not a class template
   96 | template<> struct is_wchar_t<arg_setter_<wchar_t, true >> : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:96:56: error: ‘boost::process::detail::is_wchar_t’ is not a template
   96 | template<> struct is_wchar_t<arg_setter_<wchar_t, true >> : std::true_type {};
      |                                                        ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:97:19: error: ‘is_wchar_t’ is not a class template
   97 | template<> struct is_wchar_t<arg_setter_<wchar_t, false>> : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:97:56: error: ‘boost::process::detail::is_wchar_t’ is not a template
   97 | template<> struct is_wchar_t<arg_setter_<wchar_t, false>> : std::true_type {};
      |                                                        ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:100:8: error: ‘char_converter’ is not a class template
  100 | struct char_converter<char, arg_setter_<wchar_t, true>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:100:54: error: ‘boost::process::detail::char_converter’ is not a template
  100 | struct char_converter<char, arg_setter_<wchar_t, true>>
      |                                                      ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:115:8: error: ‘char_converter’ is not a class template
  115 | struct char_converter<wchar_t, arg_setter_<char, true>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:115:54: error: ‘boost::process::detail::char_converter’ is not a template
  115 | struct char_converter<wchar_t, arg_setter_<char, true>>
      |                                                      ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:131:8: error: ‘char_converter’ is not a class template
  131 | struct char_converter<char, arg_setter_<wchar_t, false>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:131:55: error: ‘boost::process::detail::char_converter’ is not a template
  131 | struct char_converter<char, arg_setter_<wchar_t, false>>
      |                                                       ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:145:8: error: ‘char_converter’ is not a class template
  145 | struct char_converter<wchar_t, arg_setter_<char, false>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:145:55: error: ‘boost::process::detail::char_converter’ is not a template
  145 | struct char_converter<wchar_t, arg_setter_<char, false>>
      |                                                       ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:277:8: error: ‘initializer_builder’ is not a class template
  277 | struct initializer_builder<cmd_or_exe_tag<char>>
      |        ^~~~~~~~~~~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:277:47: error: ‘boost::process::detail::initializer_builder’ is not a template
  277 | struct initializer_builder<cmd_or_exe_tag<char>>
      |                                               ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:338:8: note: previous declaration here
  338 | struct initializer_builder<env_tag<char>>
      |        ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/boost/process/args.hpp:33,
                 from /usr/include/boost/process.hpp:22,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/basic_cmd.hpp:283:8: error: ‘initializer_builder’ is not a class template
  283 | struct initializer_builder<cmd_or_exe_tag<wchar_t>>
      |        ^~~~~~~~~~~~~~~~~~~
/usr/include/boost/process/detail/basic_cmd.hpp:283:50: error: ‘boost::process::detail::initializer_builder’ is not a template
  283 | struct initializer_builder<cmd_or_exe_tag<wchar_t>>
      |                                                  ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:338:8: note: previous declaration here
  338 | struct initializer_builder<env_tag<char>>
      |        ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/traits.hpp:11,
                 from /usr/include/boost/process/async.hpp:32,
                 from /usr/include/boost/process.hpp:23,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/traits/async.hpp:23:8: error: ‘initializer_builder’ is not a class template
   23 | struct initializer_builder<async_tag>;
      |        ^~~~~~~~~~~~~~~~~~~
/usr/include/boost/process/detail/traits/async.hpp:23:8: error: ‘boost::process::detail::initializer_builder’ is not a template
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:338:8: note: previous declaration here
  338 | struct initializer_builder<env_tag<char>>
      |        ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/boost/process.hpp:23,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/async.hpp:82:8: error: ‘initializer_builder’ is not a class template
   82 | struct initializer_builder<async_tag>
      |        ^~~~~~~~~~~~~~~~~~~
/usr/include/boost/process/async.hpp:82:37: error: ‘boost::process::detail::initializer_builder’ is not a template
   82 | struct initializer_builder<async_tag>
      |                                     ^
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:338:8: note: previous declaration here
  338 | struct initializer_builder<env_tag<char>>
      |        ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/boost/process/detail/posix/executor.hpp:14,
                 from /usr/include/boost/process/detail/execute_impl.hpp:24,
                 from /usr/include/boost/process/child.hpp:22,
                 from /usr/include/boost/process/async_system.hpp:22,
                 from /usr/include/boost/process.hpp:24,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/error.hpp:169:8: error: ‘initializer_builder’ is not a class template
  169 | struct initializer_builder<error_tag>
      |        ^~~~~~~~~~~~~~~~~~~
/usr/include/boost/process/error.hpp:169:37: error: ‘boost::process::detail::initializer_builder’ is not a template
  169 | struct initializer_builder<error_tag>
      |                                     ^
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:338:8: note: previous declaration here
  338 | struct initializer_builder<env_tag<char>>
      |        ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/boost/process/child.hpp:22,
                 from /usr/include/boost/process/async_system.hpp:22,
                 from /usr/include/boost/process.hpp:24,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/execute_impl.hpp:60:38: error: ‘boost::process::detail::is_wchar_t’ is not a template
   60 |     constexpr static bool my_value = is_wchar_t<res_type>::value;
      |                                      ^~~~~~~~~~
/usr/include/boost/process/detail/execute_impl.hpp:72:35: error: ‘boost::process::detail::is_wchar_t’ is not a template
   72 |     constexpr static bool value = is_wchar_t<res_type>::value;
      |                                   ^~~~~~~~~~
/usr/include/boost/process/detail/execute_impl.hpp:118:22: error: expected nested-name-specifier before ‘initializer_builder’
  118 |     typedef typename initializer_builder<tag>::type builder_type;
      |                      ^~~~~~~~~~~~~~~~~~~
/usr/include/boost/process/detail/execute_impl.hpp:118:22: error: expected ‘;’ at end of member declaration
  118 |     typedef typename initializer_builder<tag>::type builder_type;
      |                      ^~~~~~~~~~~~~~~~~~~
      |                                         ;
/usr/include/boost/process/detail/execute_impl.hpp:118:41: error: expected unqualified-id before ‘<’ token
  118 |     typedef typename initializer_builder<tag>::type builder_type;
      |                                         ^
/usr/include/boost/process/detail/execute_impl.hpp:119:61: error: ‘builder_type’ was not declared in this scope
  119 |     typedef typename boost::fusion::result_of::has_key<set, builder_type> has_key;
      |                                                             ^~~~~~~~~~~~
/usr/include/boost/process/detail/execute_impl.hpp:119:73: error: template argument 2 is invalid
  119 |     typedef typename boost::fusion::result_of::has_key<set, builder_type> has_key;
      |                                                                         ^
/usr/include/boost/process/detail/execute_impl.hpp:119:75: error: invalid use of template-name ‘boost::fusion::result_of::has_key’ without an argument list
  119 |     typedef typename boost::fusion::result_of::has_key<set, builder_type> has_key;
      |                                                                           ^~~~~~~
In file included from /usr/include/boost/fusion/sequence/intrinsic/begin.hpp:14,
                 from /usr/include/boost/fusion/algorithm/query/detail/find_if.hpp:22,
                 from /usr/include/boost/fusion/view/filter_view/filter_view_iterator.hpp:15,
                 from /usr/include/boost/fusion/view/filter_view/filter_view.hpp:14,
                 from /usr/include/boost/fusion/algorithm/transformation/filter_if.hpp:11,
                 from /usr/include/boost/fusion/include/filter_if.hpp:11,
                 from /usr/include/boost/process/detail/used_handles.hpp:10,
                 from /usr/include/boost/process/detail/posix/close_in.hpp:15,
                 from /usr/include/boost/process/io.hpp:20,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:12:
/usr/include/boost/fusion/sequence/intrinsic_fwd.hpp:74:16: note: ‘template<class Sequence, class Key> struct boost::fusion::result_of::has_key’ declared here
   74 |         struct has_key;
      |                ^~~~~~~
In file included from /usr/include/boost/process/child.hpp:22,
                 from /usr/include/boost/process/async_system.hpp:22,
                 from /usr/include/boost/process.hpp:24,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/execute_impl.hpp:125:30: error: ‘has_key’ was not declared in this scope
  125 |             std::conditional<has_key::value,
      |                              ^~~~~~~
/usr/include/boost/process/detail/execute_impl.hpp:125:30: note: suggested alternatives:
In file included from /usr/include/boost/mpl/has_key.hpp:18,
                 from /usr/include/boost/fusion/adapted/mpl/detail/has_key_impl.hpp:12,
                 from /usr/include/boost/fusion/adapted/mpl.hpp:18,
                 from /usr/include/boost/fusion/mpl.hpp:12,
                 from /usr/include/boost/fusion/view/detail/strictest_traversal.hpp:16,
                 from /usr/include/boost/fusion/view/transform_view/transform_view.hpp:21,
                 from /usr/include/boost/fusion/algorithm/transformation/transform.hpp:11,
                 from /usr/include/boost/process/detail/posix/io_context_ref.hpp:15,
                 from /usr/include/boost/process/async.hpp:42,
                 from /usr/include/boost/process.hpp:23,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/mpl/has_key_fwd.hpp:21:63: note:   ‘boost::mpl::has_key’
   21 | template< typename AssociativeSequence, typename Key > struct has_key;
      |                                                               ^~~~~~~
In file included from /usr/include/boost/fusion/mpl/has_key.hpp:12,
                 from /usr/include/boost/fusion/mpl.hpp:23,
                 from /usr/include/boost/fusion/view/detail/strictest_traversal.hpp:16,
                 from /usr/include/boost/fusion/view/transform_view/transform_view.hpp:21,
                 from /usr/include/boost/fusion/algorithm/transformation/transform.hpp:11,
                 from /usr/include/boost/process/detail/posix/io_context_ref.hpp:15,
                 from /usr/include/boost/process/async.hpp:42,
                 from /usr/include/boost/process.hpp:23,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/fusion/sequence/intrinsic/has_key.hpp:73:5: note:   ‘boost::fusion::has_key’
   73 |     has_key(Sequence const&)
      |     ^~~~~~~
In file included from /usr/include/boost/fusion/sequence/intrinsic/begin.hpp:14,
                 from /usr/include/boost/fusion/algorithm/query/detail/find_if.hpp:22,
                 from /usr/include/boost/fusion/view/filter_view/filter_view_iterator.hpp:15,
                 from /usr/include/boost/fusion/view/filter_view/filter_view.hpp:14,
                 from /usr/include/boost/fusion/algorithm/transformation/filter_if.hpp:11,
                 from /usr/include/boost/fusion/include/filter_if.hpp:11,
                 from /usr/include/boost/process/detail/used_handles.hpp:10,
                 from /usr/include/boost/process/detail/posix/close_in.hpp:15,
                 from /usr/include/boost/process/io.hpp:20,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:12:
/usr/include/boost/fusion/sequence/intrinsic_fwd.hpp:74:16: note:   ‘boost::fusion::result_of::has_key’
   74 |         struct has_key;
      |                ^~~~~~~
In file included from /usr/include/boost/process/child.hpp:22,
                 from /usr/include/boost/process/async_system.hpp:22,
                 from /usr/include/boost/process.hpp:24,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/execute_impl.hpp:128:13: error: wrong number of template arguments (1, should be 3)
  128 |             >::type type;
      |             ^
In file included from /usr/include/c++/9/bits/move.h:55,
                 from /usr/include/c++/9/bits/stl_pair.h:59,
                 from /usr/include/c++/9/bits/stl_algobase.h:64,
                 from /usr/include/c++/9/bits/char_traits.h:39,
                 from /usr/include/c++/9/string:40,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_utils.hpp:5,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.hpp:4,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:1:
/usr/include/c++/9/type_traits:92:12: note: provided for ‘template<bool <anonymous>, class, class> struct std::conditional’
   92 |     struct conditional;
      |            ^~~~~~~~~~~
In file included from /usr/include/boost/process/child.hpp:22,
                 from /usr/include/boost/process/async_system.hpp:22,
                 from /usr/include/boost/process.hpp:24,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/execute_impl.hpp:128:14: error: expected identifier before ‘::’ token
  128 |             >::type type;
      |              ^~
/usr/include/boost/process/detail/execute_impl.hpp:128:16: error: typedef name may not be a nested-name-specifier
  128 |             >::type type;
      |                ^~~~
/usr/include/boost/process/detail/execute_impl.hpp:128:16: error: expected ‘;’ at end of member declaration
  128 |             >::type type;
      |                ^~~~
      |                    ;
/usr/include/boost/process/detail/execute_impl.hpp:128:21: error: declaration does not declare anything [-fpermissive]
  128 |             >::type type;
      |                     ^~~~
/usr/include/boost/process/detail/execute_impl.hpp: In member function ‘void boost::process::detail::builder_ref<Builders>::operator()(T&&) const’:
/usr/include/boost/process/detail/execute_impl.hpp:148:26: error: expected nested-name-specifier before ‘initializer_builder’
  148 |         typedef typename initializer_builder<tag>::type builder_type;
      |                          ^~~~~~~~~~~~~~~~~~~
/usr/include/boost/process/detail/execute_impl.hpp:148:45: error: expected initializer before ‘<’ token
  148 |         typedef typename initializer_builder<tag>::type builder_type;
      |                                             ^
/usr/include/boost/process/detail/execute_impl.hpp:149:31: error: ‘builder_type’ was not declared in this scope; did you mean ‘builder_ref’?
  149 |         boost::fusion::at_key<builder_type>(builders)(std::forward<T>(value));
      |                               ^~~~~~~~~~~~
      |                               builder_ref
In file included from /usr/include/boost/process.hpp:25,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/group.hpp: At global scope:
/usr/include/boost/process/group.hpp:220:8: error: ‘initializer_builder’ is not a class template
  220 | struct initializer_builder<group_tag>
      |        ^~~~~~~~~~~~~~~~~~~
/usr/include/boost/process/group.hpp:220:37: error: ‘boost::process::detail::initializer_builder’ is not a template
  220 | struct initializer_builder<group_tag>
      |                                     ^
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:338:8: note: previous declaration here
  338 | struct initializer_builder<env_tag<char>>
      |        ^~~~~~~~~~~~~~~~~~~
In file included from /usr/include/boost/process.hpp:27,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/cmd.hpp:71:19: error: ‘is_wchar_t’ is not a class template
   71 | template<> struct is_wchar_t<api::cmd_setter_<wchar_t>> : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/cmd.hpp:71:54: error: ‘boost::process::detail::is_wchar_t’ is not a template
   71 | template<> struct is_wchar_t<api::cmd_setter_<wchar_t>> : std::true_type {};
      |                                                      ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
In file included from /usr/include/boost/process.hpp:27,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/cmd.hpp:76:8: error: ‘char_converter’ is not a class template
   76 | struct char_converter<char, api::cmd_setter_<wchar_t>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/cmd.hpp:76:53: error: ‘boost::process::detail::char_converter’ is not a template
   76 | struct char_converter<char, api::cmd_setter_<wchar_t>>
      |                                                     ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process.hpp:27,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/cmd.hpp:85:8: error: ‘char_converter’ is not a class template
   85 | struct char_converter<wchar_t, api::cmd_setter_<char>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/cmd.hpp:85:53: error: ‘boost::process::detail::char_converter’ is not a template
   85 | struct char_converter<wchar_t, api::cmd_setter_<char>>
      |                                                     ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process.hpp:40,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/start_dir.hpp:70:19: error: ‘is_wchar_t’ is not a class template
   70 | template<> struct is_wchar_t<api::start_dir_init<wchar_t>> : std::true_type {};
      |                   ^~~~~~~~~~
/usr/include/boost/process/start_dir.hpp:70:57: error: ‘boost::process::detail::is_wchar_t’ is not a template
   70 | template<> struct is_wchar_t<api::start_dir_init<wchar_t>> : std::true_type {};
      |                                                         ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:107:19: note: previous declaration here
  107 | template<> struct is_wchar_t<env_set<wchar_t>>           : std::true_type {};
      |                   ^~~~~~~~~~
In file included from /usr/include/boost/process.hpp:40,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/start_dir.hpp:73:8: error: ‘char_converter’ is not a class template
   73 | struct char_converter<char, api::start_dir_init<wchar_t>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/start_dir.hpp:73:56: error: ‘boost::process::detail::char_converter’ is not a template
   73 | struct char_converter<char, api::start_dir_init<wchar_t>>
      |                                                        ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process.hpp:40,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/start_dir.hpp:82:8: error: ‘char_converter’ is not a class template
   82 | struct char_converter<wchar_t, api::start_dir_init<char>>
      |        ^~~~~~~~~~~~~~
/usr/include/boost/process/start_dir.hpp:82:56: error: ‘boost::process::detail::char_converter’ is not a template
   82 | struct char_converter<wchar_t, api::start_dir_init<char>>
      |                                                        ^~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:114:8: note: previous declaration here
  114 | struct char_converter<char, env_set<wchar_t>>
      |        ^~~~~~~~~~~~~~
In file included from /usr/include/boost/process/child.hpp:22,
                 from /usr/include/boost/process/async_system.hpp:22,
                 from /usr/include/boost/process.hpp:24,
                 from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:39:
/usr/include/boost/process/detail/execute_impl.hpp: In instantiation of ‘boost::process::child boost::process::detail::execute_impl(Args&& ...) [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::process::detail::posix::pipe_out<1, -1>, boost::process::detail::env_init<char>}]’:
/usr/include/boost/process/child.hpp:35:51:   required from ‘boost::process::child::child(Args&& ...) [with Args = {std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::process::detail::posix::pipe_out<1, -1>, boost::process::detail::env_init<char>}]’
/home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:232:28:   required from here
/usr/include/boost/process/detail/execute_impl.hpp:276:76: error: cannot convert ‘std::__cxx11::basic_string<char>’ to ‘const boost::process::detail::env_set<wchar_t>&’
  276 |         boost::process::detail::char_converter_t<req_char_type, Args>::conv(
      |         ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
  277 |                 std::forward<Args>(args))...
      |                 ~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:11:
/usr/include/boost/process/env.hpp:116:56: note:   initializing argument 1 of ‘static boost::process::detail::env_set<char> boost::process::detail::char_converter::conv(const boost::process::detail::env_set<wchar_t>&)’
  116 |     static env_set<char> conv(const env_set<wchar_t> & in)
      |                               ~~~~~~~~~~~~~~~~~~~~~~~~~^~
/home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp: In member function ‘std::optional<std::vector<unsigned char> > bpftime::attach::nv_attach_impl::hack_fatbin(std::vector<unsigned char>&&)’:
/home/ffazzari/bpftime/attach/nv_attach_impl/nv_attach_impl.cpp:211:10: warning: ignoring return value of ‘char* mkdtemp(char*)’, declared with attribute warn_unused_result [-Wunused-result]
  211 |   mkdtemp(tmp_dir);
      |   ~~~~~~~^~~~~~~~~
make[2]: *** [attach/nv_attach_impl/CMakeFiles/bpftime_nv_attach_impl.dir/build.make:76: attach/nv_attach_impl/CMakeFiles/bpftime_nv_attach_impl.dir/nv_attach_impl.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [CMakeFiles/Makefile2:1492: attach/nv_attach_impl/CMakeFiles/bpftime_nv_attach_impl.dir/all] Error 2
make: *** [Makefile:156: all] Error 2

My enviroment on my machine:

Enviroment
 Ubuntu 22.04.4 LTS
-- System Version: 5.15.0-118-generic
-- System Processor: x86_64
-- Using frida: arch=linux-x86_64, version=16.1.2
-- Build spdlog: 1.15.2
-- Build type: Release
-- Supporting llvm-jit
-- Checking LLVM_VERSION_MAJOR macro value...
-- LLVM_VERSION_MAJOR is: 19

gcc 12.3
libboost 1.74.0 (I also tried 1.89, same output)
CUDA 11.5 (also tried 12.6)

I can compile bpftime without the eGPU flags on the Docker machine (unlike on my local machine, where it fails due to missing shared libraries). However, when I try to enable eGPU support, I run into this error.


Solution

I found the problem and I solved in the following way:

  1. To solve boost error I putted as first include the following header in attach/nv_attach_impl/nv_attach_impl.cpp:
#include <boost/process.hpp>

Then I compiled bpftime and enabled eGPU feature using the following cmake setting: [EDIT 1]: using boost 1.74 it compile without any problem, my suggestion is to not force a newer version since I had problem compiling ubpf

 cmake -Bbuild \                                             
  -DCMAKE_C_COMPILER=$(which gcc-12) \
  -DCMAKE_CXX_COMPILER=$(which g++-12) \
  -DBPFTIME_ENABLE_CUDA_ATTACH=1 \
  -DBPFTIME_CUDA_ROOT=/usr/local/cuda-11.5 \
  -DBoost_INCLUDE_DIR=<your-boost-path>/boost/include \ # I used boost 1.89 compiled by source
  -DBoost_LIBRARY_DIR=<your-boost-path>/boost/lib \
  -DCMAKE_CXX_COMPILER_AR=$(which gcc-ar-12) \
  -DCMAKE_C_COMPILER_AR=$(which gcc-ar-12) \
  -DCMAKE_CXX_COMPILER_RANLIB=$(which gcc-ranlib-12) \
  -DCMAKE_C_COMPILER_RANLIB=$(which gcc-ranlib-12) -DCMAKE_BUILD_TYPE:STRING=Release \
  1. After that, I encountered other issues:
Error log
/runtime/src/handler/map_handler.cpp:807:4: warning: left operand of comma operator has no effect [-Wunused-value]
  807 |    "Map {} (nv_gpu_ringbuf_map_impl) has space for thread count {}",
      |    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/runtime/src/handler/map_handler.cpp:808:49: error: expected ‘;’ before ‘)’ token
  808 |    container_name.c_str(), attr.gpu_thread_count);
      |                                                 ^
      |                                                 ;
/runtime/src/handler/map_handler.cpp:808:33: warning: right operand of comma operator has no effect [-Wunused-value]
  808 |    container_name.c_str(), attr.gpu_thread_count);
      |                            ~~~~~^~~~~~~~~~~~~~~~
/runtime/src/handler/map_handler.cpp: In member function ‘void bpftime::bpf_map_handler::map_free(bpftime::managed_shared_memory&) const’:
/runtime/src/handler/map_handler.cpp:909:2: error: duplicate case value
  909 |  case bpf_map_type::BPF_MAP_TYPE_NV_GPU_ARRAY_MAP:
      |  ^~~~
/runtime/src/handler/map_handler.cpp:904:2: note: previously used here
  904 |  case bpf_map_type::BPF_MAP_TYPE_NV_GPU_ARRAY_MAP:
      |  ^~~~
[ 83%] Built target bpftime-object

The errors were caused by some code that had been left unfinished before the commit. After fixing them, the compilation completed successfully. I used the following command:

cmake --build build --config Release --target install

And there you can find the diff of the runtime/src/handler/map_handler.cpp file:

map_handler git diff
diff --git a/runtime/src/handler/map_handler.cpp b/runtime/src/handler/map_handler.cpp
index 6f19c3f..a7cb28b 100644
--- a/runtime/src/handler/map_handler.cpp
+++ b/runtime/src/handler/map_handler.cpp
@@ -804,6 +804,7 @@ int bpf_map_handler::map_init(managed_shared_memory &memory)
                "CUDA context for thread {} has been set to {:x}",
                gettid(), (uintptr_t)context);
        }
+       SPDLOG_INFO(
            "Map {} (nv_gpu_ringbuf_map_impl) has space for thread count {}",
            container_name.c_str(), attr.gpu_thread_count);
        map_impl_ptr = memory.construct<nv_gpu_ringbuf_map_impl>(
@@ -900,11 +901,6 @@ void bpf_map_handler::map_free(managed_shared_memory &memory) const
        break;
    
 #endif
-#if defined(BPFTIME_ENABLE_CUDA_ATTACH)
-   case bpf_map_type::BPF_MAP_TYPE_NV_GPU_ARRAY_MAP:
-       memory.destroy<nv_gpu_array_map_impl>(container_name.c_str());
-       break;
-#endif
 #if defined(BPFTIME_ENABLE_CUDA_ATTACH)
    case bpf_map_type::BPF_MAP_TYPE_NV_GPU_ARRAY_MAP:
        memory.destroy<nv_gpu_array_map_impl>(container_name.c_str());

cizzoo avatar Sep 19 '25 08:09 cizzoo