RcppCore/RcppParallel

Cannot load: undefined symbol tbb::task::note_affinity

Enchufa2 opened this issue · 5 comments

Are we sure that nothing is required on Linux?

RcppParallel/R/tbb.R

Lines 92 to 93 in 0da9610

# nothing required on other platforms
""

I cannot load the markovchain package (cc @spedygiorgio), which links against RcppParallel, with the following error:

Error: package or namespace load failed for ‘markovchain’ in dyn.load(file, DLLpath = DLLpath, ...):
 unable to load shared object '/usr/local/lib/R/library/markovchain/libs/markovchain.so':
  /usr/local/lib/R/library/markovchain/libs/markovchain.so: undefined symbol: _ZN3tbb4task13note_affinityEt

So somehow this TBB symbol ends up in the markovchain library. Manually adding -ltbb to the linking phase solves the issue for me, but currently RcppParallel::RcppParallelLibs() returns nothing for Linux.

We can compare notes, I can on the courtesy Linux VM I use for Rcpp testing which has a ton of packages in ~/tmp/lib:

R> .libPaths()
[1] "/home/dirk/tmp/lib"            "/usr/local/lib/R/site-library" "/usr/lib/R/site-library"       "/usr/lib/R/library"           
R> library("markovchain")
Package:  markovchain
Version:  0.9.0
Date:     2022-07-01
BugReport: https://github.com/spedygiorgio/markovchain/issues

R> 

All CRAN, all current, on Debian testing (also current).

With system or bundled tbb? I'm using the system tbb here via TBB_LIB and TBB_INC.

Ah yes, I am likely using the bundled one.

Then that's most probably the issue. It should be easy to fix the behavior of LdFlags() depending on whether the package was built using a user-provided TBB_LIB, or an auto-detected one as proposed in #178. I'll look into this when I find time.

Cannot reproduce this anymore.