Skip to content

Debug build fails with 'undefined symbol: tbb::detail::r1::execution_slot' #13908

@edolstra

Description

@edolstra

Describe the bug

On Linux, following the instructions to do a debug build, i.e.

export mesonBuildType=debug
NIX_HARDENING_ENABLE=$(printLines $NIX_HARDENING_ENABLE | grep -v fortify)

fails with

FAILED: src/libexpr/libnixexpr.so 
g++  -o src/libexpr/libnixexpr.so src/libexpr/libnixexpr.so.p/meson-generated_.._parser-tab.cc.o src/libexpr/libnixexpr.so.p/meson-generated_.._lexer-tab.cc.o src/libexpr/libnixexpr.so.p/attr-path.cc.o src/libexpr/libnixexpr.so.p/attr-set.cc.o src/libexpr/libnixexpr.so.p/eval-cache.cc.o src/libexpr/libnixexpr.so.p/eval-error.cc.o src/libexpr/libnixexpr.so.p/eval-gc.cc.o src/libexpr/libnixexpr.so.p/eval-profiler-settings.cc.o src/libexpr/libnixexpr.so.p/eval-profiler.cc.o src/libexpr/libnixexpr.so.p/eval-settings.cc.o src/libexpr/libnixexpr.so.p/eval.cc.o src/libexpr/libnixexpr.so.p/function-trace.cc.o src/libexpr/libnixexpr.so.p/get-drvs.cc.o src/libexpr/libnixexpr.so.p/json-to-value.cc.o src/libexpr/libnixexpr.so.p/lexer-helpers.cc.o src/libexpr/libnixexpr.so.p/nixexpr.cc.o src/libexpr/libnixexpr.so.p/parallel-eval.cc.o src/libexpr/libnixexpr.so.p/paths.cc.o src/libexpr/libnixexpr.so.p/primops.cc.o src/libexpr/libnixexpr.so.p/print-ambiguous.cc.o src/libexpr/libnixexpr.so.p/print.cc.o src/libexpr/libnixexpr.so.p/search-path.cc.o src/libexpr/libnixexpr.so.p/symbol-table.cc.o src/libexpr/libnixexpr.so.p/value-to-json.cc.o src/libexpr/libnixexpr.so.p/value-to-xml.cc.o src/libexpr/libnixexpr.so.p/value_context.cc.o src/libexpr/libnixexpr.so.p/primops_context.cc.o src/libexpr/libnixexpr.so.p/primops_fetchClosure.cc.o src/libexpr/libnixexpr.so.p/primops_fetchMercurial.cc.o src/libexpr/libnixexpr.so.p/primops_fetchTree.cc.o src/libexpr/libnixexpr.so.p/primops_fromTOML.cc.o -Wl,--as-needed -Wl,--no-undefined -fuse-ld=mold -shared -fPIC -Wl,-soname,libnixexpr.so '-Wl,-rpath,$ORIGIN/../libutil:$ORIGIN/../libstore:$ORIGIN/../libfetchers' -Wl,--start-group src/libutil/libnixutil.so src/libstore/libnixstore.so src/libfetchers/libnixfetchers.so /nix/store/8v7yh9j4vhryxhnmgn6a0l3scgc85kn5-boehm-gc-8.2.8/lib/libgc.so -lpthread -ldl -pthread /nix/store/y130gnbp2qkfq6svqdv0s61b3m4043yp-libarchive-3.8.0-lib/lib/libarchive.so /nix/store/ijslv1m9rn4iqfbnc8b0z715iisfqv2d-boost-1.87.0/lib/libboost_container.so.1.87.0 /nix/store/ijslv1m9rn4iqfbnc8b0z715iisfqv2d-boost-1.87.0/lib/libboost_context.so.1.87.0 /nix/store/ijslv1m9rn4iqfbnc8b0z715iisfqv2d-boost-1.87.0/lib/libboost_thread.so.1.87.0 -Wl,--end-group
mold: error: undefined symbol: tbb::detail::r1::execution_slot(tbb::detail::d1::execution_data const*)
>>> referenced by parser-tab.cc
>>>               src/libexpr/libnixexpr.so.p/meson-generated_.._parser-tab.cc.o:(tbb::detail::d1::execution_slot(tbb::detail::d1::execution_data const&))
>>> referenced by parser-tab.cc
>>>               src/libexpr/libnixexpr.so.p/meson-generated_.._parser-tab.cc.o:(tbb::detail::d1::current_thread_index())
collect2: error: ld returned 1 exit status

Not clear where this dependency on tbb comes from.

Workaround: apply this patch:

diff --git a/src/libcmd/meson.build b/src/libcmd/meson.build
index 24e075246..519562ca5 100644
--- a/src/libcmd/meson.build
+++ b/src/libcmd/meson.build
@@ -97,7 +97,7 @@ this_library = library(
   config_priv_h,
   dependencies : deps_public + deps_private + deps_other,
   include_directories : include_dirs,
-  link_args : linker_export_flags,
+  link_args : linker_export_flags + [ '-ltbb' ],
   prelink : true, # For C++ static initializers
   install : true,
   cpp_pch : do_pch ? [ 'pch/precompiled-headers.hh' ] : [],
diff --git a/src/libexpr-c/meson.build b/src/libexpr-c/meson.build
index 7c014d61d..2d3f3ea8b 100644
--- a/src/libexpr-c/meson.build
+++ b/src/libexpr-c/meson.build
@@ -52,7 +52,7 @@ this_library = library(
   sources,
   dependencies : deps_public + deps_private + deps_other,
   include_directories : include_dirs,
-  link_args : linker_export_flags,
+  link_args : linker_export_flags + [ '-ltbb' ],
   prelink : true, # For C++ static initializers
   install : true,
 )
diff --git a/src/libexpr-tests/meson.build b/src/libexpr-tests/meson.build
index a876e9705..c2e55cb42 100644
--- a/src/libexpr-tests/meson.build
+++ b/src/libexpr-tests/meson.build
@@ -73,7 +73,7 @@ this_exe = executable(
   dependencies : deps_private_subproject + deps_private + deps_other,
   include_directories : include_dirs,
   # TODO: -lrapidcheck, see ../libutil-support/build.meson
-  link_args : linker_export_flags + [ '-lrapidcheck' ],
+  link_args : linker_export_flags + [ '-lrapidcheck', '-ltbb' ],
   install : true,
   cpp_pch : do_pch ? [ 'pch/precompiled-headers.hh' ] : [],
 )
diff --git a/src/libexpr/meson.build b/src/libexpr/meson.build
index 33e24a948..4eb757524 100644
--- a/src/libexpr/meson.build
+++ b/src/libexpr/meson.build
@@ -180,7 +180,7 @@ this_library = library(
   generated_headers,
   dependencies : deps_public + deps_private + deps_other,
   include_directories : include_dirs,
-  link_args : linker_export_flags,
+  link_args : linker_export_flags + [ '-ltbb' ],
   prelink : true, # For C++ static initializers
   install : true,
   cpp_pch : do_pch ? [ 'pch/precompiled-headers.hh' ] : [],
diff --git a/src/libflake-c/meson.build b/src/libflake-c/meson.build
index 933e06d90..b791947cf 100644
--- a/src/libflake-c/meson.build
+++ b/src/libflake-c/meson.build
@@ -55,7 +55,7 @@ this_library = library(
   sources,
   dependencies : deps_public + deps_private + deps_other,
   include_directories : include_dirs,
-  link_args : linker_export_flags,
+  link_args : linker_export_flags + [ '-ltbb' ],
   prelink : true, # For C++ static initializers
   install : true,
 )
diff --git a/src/libflake/meson.build b/src/libflake/meson.build
index 191d8f068..032613670 100644
--- a/src/libflake/meson.build
+++ b/src/libflake/meson.build
@@ -60,7 +60,7 @@ this_library = library(
   generated_headers,
   dependencies : deps_public + deps_private + deps_other,
   include_directories : include_dirs,
-  link_args : linker_export_flags,
+  link_args : linker_export_flags + [ '-ltbb' ],
   prelink : true, # For C++ static initializers
   install : true,
 )
diff --git a/src/nix/meson.build b/src/nix/meson.build
index 504938b91..c395b3984 100644
--- a/src/nix/meson.build
+++ b/src/nix/meson.build
@@ -187,7 +187,7 @@ this_exe = executable(
   sources,
   dependencies : deps_private_subproject + deps_private + deps_other,
   include_directories : include_dirs,
-  link_args : linker_export_flags,
+  link_args : linker_export_flags + [ '-ltbb' ],
   install : true,
   cpp_pch : do_pch ? [ 'pch/precompiled-headers.hh' ] : [],
 )

Steps To Reproduce

Expected behavior

Metadata

Additional context

Checklist


Add 👍 to issues you find important.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugbuild-problemNix fails to compile or test; also improvements to build process

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions