conan-center-index icon indicating copy to clipboard operation
conan-center-index copied to clipboard

[package] onetbb/2021.10.0: tbbmalloc is not linked

Open maichmueller opened this issue 11 months ago • 4 comments

Description

EDIT: Linking onetbb fails for libtbbmalloc. My CMake configuration reads:

find_package(TBB REQUIRED)
...
target_link_libraries(
        train
        PRIVATE
        onetbb::onetbb
)

Running the executable throws the following error:

train: error while loading shared libraries: libtbbmalloc_debug.so.2: cannot open shared object file: No such file or directory

and

train: error while loading shared libraries: libtbbmalloc.so.2: cannot open shared object file: No such file or directory

respectively depending on the config.

CMake-Conan handles the conan installation via the provided conan_provider.cmake. My conandata.yml includes the aforementioned package among others and conanfile.py is defaulted.

Checking the executable in debug and release with ldd shows the following:

ldd train                                                                                                                                       
...
	libtbb_debug.so.12 => /u/michael.aichmueller/.conan2/p/b/onetb22d5b511a1c11/p/lib/libtbb_debug.so.12 (0x00007f95cb9fa000)
	libtbbmalloc_proxy_debug.so.2 => /u/michael.aichmueller/.conan2/p/b/onetb22d5b511a1c11/p/lib/libtbbmalloc_proxy_debug.so.2 (0x00007f95cb9f3000)
	libtbbmalloc_debug.so.2 => not found

and

ldd train                                                                                                                                                   
...
	libtbbmalloc_proxy.so.2 => /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbbmalloc_proxy.so.2 (0x00007ff4e3936000)
	libtbb.so.12 => /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbb.so.12 (0x00007ff4e38df000)
	libtbbmalloc.so.2 => not found

But all the libs are available in /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib (release) and /u/michael.aichmueller/.conan2/p/b/onetb22d5b511a1c11/p/lib (debug):

ls /u/michael.aichmueller/.conan2/p/b/onetb22d5b511a1c11/p/lib/                                                                                       
libtbbbind_2_5_debug.so       libtbb_debug.so        libtbbmalloc_debug.so       libtbbmalloc_proxy_debug.so
libtbbbind_2_5_debug.so.3     libtbb_debug.so.12     libtbbmalloc_debug.so.2     libtbbmalloc_proxy_debug.so.2
libtbbbind_2_5_debug.so.3.10  libtbb_debug.so.12.10  libtbbmalloc_debug.so.2.10  libtbbmalloc_proxy_debug.so.2.10

ls /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib                                                                                          
libtbbbind_2_5.so    libtbbbind_2_5.so.3.10  libtbbmalloc_proxy.so.2     libtbbmalloc.so    libtbbmalloc.so.2.10  libtbb.so.12
libtbbbind_2_5.so.3  libtbbmalloc_proxy.so   libtbbmalloc_proxy.so.2.10  libtbbmalloc.so.2  libtbb.so             libtbb.so.12.10

I don't understand how linking tbbmalloc can succeed, but running the executable fails to find this lib in the same folder as the other tbb libs.

Package and Environment Details

  • Package Name/Version: onetbb/2021.10.0
  • Operating System+version: Linux Ubuntu 22.04
  • Compiler+version: GCC 11
  • Conan version: conan 2.0.14
  • Python version: Python 3.11.5
  • CMake version: CMake 3.26.5

Conan profile

conan profile show Host profile: [settings] arch=x86_64 build_type=Release compiler=gcc compiler.cppstd=gnu17 compiler.libcxx=libstdc++11 compiler.version=11 os=Linux

Build profile: [settings] arch=x86_64 build_type=Release compiler=gcc compiler.cppstd=gnu17 compiler.libcxx=libstdc++11 compiler.version=11 os=Linux

Steps to reproduce

conandata.yml

# This file is managed by Conan, contents will be overwritten.
# To keep your changes, remove these comment lines, but the plugin won't be able to modify your requirements

requirements:
  - "onetbb/2021.10.0"
  - "range-v3/0.12.0"
  - "boost/1.80.0"
  - "nlohmann_json/3.11.2"
  - "tclap/1.2.5"
  - "fmt/[>=10.2.1]"
  - "spdlog/[>=1.12.0]"

conanfile.py

# This file is managed by Conan, contents will be overwritten.
# To keep your changes, remove these comment lines, but the plugin won't be able to modify your requirements

from conan import ConanFile
from conan.tools.cmake import cmake_layout, CMakeToolchain

class ConanApplication(ConanFile):
    package_type = "application"
    settings = "os", "compiler", "build_type", "arch"
    generators = "CMakeDeps"

    def layout(self):
        cmake_layout(self)

    def generate(self):
        tc = CMakeToolchain(self)
        tc.user_presets_path = False
        tc.generate()

    def requirements(self):
        requirements = self.conan_data.get('requirements', [])
        for requirement in requirements:
            self.requires(requirement)

Run: path/to/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -G Ninja -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=conan_provider.cmake -DCONAN_COMMAND=path/to/conan

Logs

Click to expand log
/u/michael.aichmueller/cmake-3.26.5-linux-x86_64/bin/cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_C_COMPILER=/usr/bin/gcc -DCMAKE_CXX_COMPILER=/usr/bin/g++ -G Ninja -DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=conan_provider.cmake -DCONAN_COMMAND=/work/rleap1/michael.aichmueller/miniconda/bin/conan -S /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network -B /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose
-- CPM: Adding package microtar@27076 (27076e1)
-- CMake-Conan: first find_package() found. Installing dependencies with Conan
-- CMake-Conan: Checking if a default profile exists
/u/michael.aichmueller/.conan2/profiles/default
-- CMake-Conan: cmake_system_name=Linux
-- CMake-Conan: cmake_system_processor=x86_64
-- CMake-Conan: CMake compiler=GNU
-- CMake-Conan: CMake compiler version=11.4.0
-- CMake-Conan: [settings] compiler=gcc
-- CMake-Conan: [settings] compiler.version=11
-- CMake-Conan: Creating profile /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose/conan_host_profile
-- CMake-Conan: Profile: 
[settings]
arch=x86_64
os=Linux
compiler=gcc
compiler.version=11
compiler.libcxx=libstdc++11
build_type=Debug
[conf]
tools.cmake.cmaketoolchain:generator=Ninja
tools.build:compiler_executables={"c":"/usr/bin/gcc","cpp":"/usr/bin/g++"}

-- CMake-Conan: Installing single configuration Debug
-- CMake-Conan: conan install /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network -of=/work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose/conan --profile:host=default;--profile:host=/work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose/conan_host_profile;--profile:build=default;--build=missing;-g;CMakeDeps

======== Input profiles ========
Profile host:
[settings]
arch=x86_64
build_type=Debug
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=11
os=Linux
[conf]
tools.cmake.cmaketoolchain:generator=Ninja
tools.build:compiler_executables={'c': '/usr/bin/gcc', 'cpp': '/usr/bin/g++'}

Profile build:
[settings]
arch=x86_64
build_type=Release
compiler=gcc
compiler.cppstd=gnu17
compiler.libcxx=libstdc++11
compiler.version=11
os=Linux


======== Computing dependency graph ========
Graph root
    conanfile.py: /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/conanfile.py
Requirements
...
    hwloc/2.9.3#7b004fab2336e27d686e9ae08dcf4b0d - Cache
...
    onetbb/2021.10.0#159e2dde755615b9f4d43b6868cdd1d2 - Cache
...
Build requirements
    b2/4.10.1#1b290403d8648c79f468f5a6496f829a - Cache
    meson/1.2.2#aace9dcc1db58fa42ecb5292f724092d - Cache
    ninja/1.11.1#77587f8c8318662ac8e5a7867eb4be21 - Cache
    pkgconf/2.1.0#27f44583701117b571307cf5b5fe5605 - Cache
Resolved version ranges
...

======== Computing necessary packages ========
Requirements
...
c2a87ebbbc9c1 - Cache
    hwloc/2.9.3#7b004fab2336e27d686e9ae08dcf4b0d:56fabb2f37a6bb653f7e6dace9a7d53edb7ea31a#0498c2022f27709979bbe5847e6e7080 - Cache
...
    onetbb/2021.10.0#159e2dde755615b9f4d43b6868cdd1d2:8b2b2c1c14c6fcd8e1404345bdd476ed368ce915#8e82421c33b31696d7be11226265eaa5 - Cache
...
Build requirements
Skipped binaries
    b2/4.10.1, meson/1.2.2, ninja/1.11.1, pkgconf/2.1.0

======== Installing packages ========
...
hwloc/2.9.3: Already installed! (3 of 11)
...
onetbb/2021.10.0: Already installed! (11 of 11)

======== Finalizing install (deploy, generators) ========
conanfile.py: Writing generators to /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose/conan/build/Debug/generators
conanfile.py: Generator 'CMakeDeps' calling 'generate()'
conanfile.py: Calling generate()
conanfile.py: Generators folder: /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose/conan/build/Debug/generators
conanfile.py: CMakeToolchain generated: conan_toolchain.cmake
conanfile.py: Preset 'conan-debug' added to CMakePresets.json. Invoke it manually using 'cmake --preset conan-debug' if using CMake>=3.23
conanfile.py: If your CMake version is not compatible with CMakePresets (<3.23) call cmake like: 'cmake <path> -G Ninja -DCMAKE_TOOLCHAIN_FILE=/work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose/conan/build/Debug/generators/conan_toolchain.cmake -DCMAKE_POLICY_DEFAULT_CMP0091=NEW -DCMAKE_BUILD_TYPE=Debug'
conanfile.py: CMakeToolchain generated: CMakePresets.json
conanfile.py: Generating aggregated env files
conanfile.py: Generated aggregated env files: ['conanbuild.sh', 'conanrun.sh']
Install finished successfully
-- CMake-Conan: CONAN_GENERATORS_FOLDER=/work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose/conan/build/Debug/generators
-- CMake-Conan: CONANFILE=/work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/conanfile.py
...
-- CMake-Conan: find_package(Git) found, 'conan install' already ran
-- CMake-Conan: find_package(TBB) found, 'conan install' already ran
-- Conan: Component target declared 'TBB::tbb'
-- Conan: Component target declared 'TBB::tbbmalloc'
-- Conan: Component target declared 'TBB::tbbmalloc_proxy'
-- Conan: Target declared 'onetbb::onetbb'
-- CMake-Conan: find_package(hwloc) found, 'conan install' already ran
-- Conan: Target declared 'hwloc::hwloc'
...
-- The following REQUIRED packages have been found:
...
 * TBB

-- Configuring done (4.5s)
-- Generating done (0.1s)
-- Build files have been written to: /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/cmake-build-debug-gcc-lactose

[Finished]

maichmueller avatar Mar 05 '24 12:03 maichmueller

If I add the conan package folder for tbb to LD_LIBRARY_PATH it does find tbbmalloc as well

LD_LIBRARY_PATH=/u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/:$LD_LIBRARY_PATH ldd train                                    
...
	libtbbmalloc_proxy.so.2 => /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbbmalloc_proxy.so.2 (0x00007efd7b721000)
	libtbb.so.12 => /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbb.so.12 (0x00007efd7b6ca000)
	libtbbmalloc.so.2 => /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbbmalloc.so.2 (0x00007efd7b10d000)

Oddly enough, it seems that tbbmalloc is not mentioned in the dynamic section of the executable for some reason:

readelf -d ./train | grep 'NEEDED'                                                                                                                    
 0x0000000000000001 (NEEDED)             Shared library: [libtorch_cpu.so]
 0x0000000000000001 (NEEDED)             Shared library: [libc10.so]
 0x0000000000000001 (NEEDED)             Shared library: [libtorch.so]
 0x0000000000000001 (NEEDED)             Shared library: [libtbbmalloc_proxy.so.2]
 0x0000000000000001 (NEEDED)             Shared library: [libtbb.so.12]
 0x0000000000000001 (NEEDED)             Shared library: [libstdc++.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libm.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [libgcc_s.so.1]
 0x0000000000000001 (NEEDED)             Shared library: [libc.so.6]
 0x0000000000000001 (NEEDED)             Shared library: [ld-linux-x86-64.so.2]

The ninja build file segement pertaining to the train executable does list all tbb libs to link against with the correct paths:

Click to expand log
build train: CXX_EXECUTABLE_LINKER__train_Release
CMakeFiles/train.dir/src/train.cpp.o CMakeFiles/train.dir/src/helpers.cpp.o CMakeFiles/train.dir/src/train_dl.cpp.o CMakeFiles/train.dir/src/train_rl.cpp.o CMakeFiles/train.dir/src/train_ol.cpp.o | libdataset.a libexperiments.a libformalism.a libmodel.a libpddl.a libplanners.a libdataset.a libplanners.a libmodel.a /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libtorch.so /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libc10.so /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libc10.so /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libkineto.a libalgorithms.a libformalism.a libmicrotar.a libmurmurhash3.a /u/michael.aichmueller/.conan2/p/spdloefc7a16752d1b/p/lib/libspdlog.a /u/michael.aichmueller/.conan2/p/fmt5520fd882199a/p/lib/libfmt.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_log_setup.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_log.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_locale.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_iostreams.a /u/michael.aichmueller/.conan2/p/bzip24ed69d4fecc16/p/lib/libbz2.a /u/michael.aichmueller/.conan2/p/zlibcdd5270f9ab9f/p/lib/libz.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_graph.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_fiber_numa.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_fiber.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_contract.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_wave.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_unit_test_framework.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_type_erasure.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_timer.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_thread.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_random.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_prg_exec_monitor.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_nowide.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_json.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_filesystem.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_coroutine.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_chrono.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_wserialization.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_test_exec_monitor.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_stacktrace_noop.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_stacktrace_basic.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_stacktrace_backtrace.a /u/michael.aichmueller/.conan2/p/libbab546f21710147/p/lib/libbacktrace.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_stacktrace_addr2line.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_serialization.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_regex.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_program_options.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_tr1l.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_tr1f.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_tr1.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_c99l.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_c99f.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_c99.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_exception.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_date_time.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_context.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_container.a /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_atomic.a /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbbmalloc_proxy.so /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbbmalloc.so /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbb.so || libalgorithms.a libdataset.a libexperiments.a libformalism.a libmicrotar.a libmodel.a libmurmurhash3.a libpddl.a libplanners.a
FLAGS = -O3 -DNDEBUG -flto=auto -fno-fat-lto-objects
LINK_LIBRARIES = -Wl,-rpath,/u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib:/u/michael.aichmueller/.conan2/p/bzip24ed69d4fecc16/p/lib:/u/michael.aichmueller/.conan2/p/zlibcdd5270f9ab9f/p/lib:/u/michael.aichmueller/.conan2/p/libbab546f21710147/p/lib:/u/michael.aichmueller/.conan2/p/range0301bf3d76d5d/p/lib:/u/michael.aichmueller/.conan2/p/fmt5520fd882199a/p/lib:/u/michael.aichmueller/.conan2/p/spdloefc7a16752d1b/p/lib:/u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib:/work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib  libdataset.a  libexperiments.a  libformalism.a  libmodel.a  libpddl.a  libplanners.a  libdataset.a  libplanners.a  libmodel.a  /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libtorch.so  -Wl,--no-as-needed,"/work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libtorch_cpu.so" -Wl,--as-needed  /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libc10.so  -Wl,--no-as-needed,"/work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libtorch.so" -Wl,--as-needed  /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libc10.so  /work/rleap1/michael.aichmueller/projects/hpl/Relational-Neural-Network/deps/libtorch_cpu/lib/libkineto.a  libalgorithms.a  libformalism.a  libmicrotar.a  libmurmurhash3.a  /u/michael.aichmueller/.conan2/p/spdloefc7a16752d1b/p/lib/libspdlog.a  /u/michael.aichmueller/.conan2/p/fmt5520fd882199a/p/lib/libfmt.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_log_setup.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_log.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_locale.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_iostreams.a  /u/michael.aichmueller/.conan2/p/bzip24ed69d4fecc16/p/lib/libbz2.a  /u/michael.aichmueller/.conan2/p/zlibcdd5270f9ab9f/p/lib/libz.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_graph.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_fiber_numa.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_fiber.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_contract.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_wave.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_unit_test_framework.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_type_erasure.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_timer.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_thread.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_random.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_prg_exec_monitor.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_nowide.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_json.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_filesystem.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_coroutine.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_chrono.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_wserialization.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_test_exec_monitor.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_stacktrace_noop.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_stacktrace_basic.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_stacktrace_backtrace.a  /u/michael.aichmueller/.conan2/p/libbab546f21710147/p/lib/libbacktrace.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_stacktrace_addr2line.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_serialization.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_regex.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_program_options.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_tr1l.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_tr1f.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_tr1.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_c99l.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_c99f.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_math_c99.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_exception.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_date_time.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_context.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_container.a  /u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib/libboost_atomic.a  /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbbmalloc_proxy.so  /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbbmalloc.so  /u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib/libtbb.so  -lm  -lrt  -lpthread  -ldl
LINK_PATH = -L/u/michael.aichmueller/.conan2/p/boostb11903ce0da08/p/lib   -L/u/michael.aichmueller/.conan2/p/bzip24ed69d4fecc16/p/lib   -L/u/michael.aichmueller/.conan2/p/zlibcdd5270f9ab9f/p/lib   -L/u/michael.aichmueller/.conan2/p/libbab546f21710147/p/lib   -L/u/michael.aichmueller/.conan2/p/range0301bf3d76d5d/p/lib   -L/u/michael.aichmueller/.conan2/p/fmt5520fd882199a/p/lib   -L/u/michael.aichmueller/.conan2/p/spdloefc7a16752d1b/p/lib   -L/u/michael.aichmueller/.conan2/p/onetb75ff22d6ae745/p/lib
OBJECT_DIR = CMakeFiles/train.dir
POST_BUILD = :
PRE_LINK = :
TARGET_FILE = train
TARGET_PDB = train.dbg

maichmueller avatar Mar 06 '24 17:03 maichmueller

If I remember correctly, tbbmalloc is not linked directly, and would be brought in by tbbmalloc_proxy instead.

I can find some evidence here:

  • https://community.intel.com/t5/Intel-oneAPI-Threading-Building/What-is-tbbmalloc-proxy/m-p/860488
  • https://community.intel.com/t5/Intel-oneAPI-Threading-Building/What-is-tbbmalloc-proxy/td-p/860488

I'd have thought that its use was opt-in as well, rather than by default - ie, I dont think your executable should link against tbbmalloc_proxy either.

jcar87 avatar Mar 06 '24 17:03 jcar87

hi @jcar87 ,

thanks for looking into this.

The behaviour of find_package(TBB REQUIRED) without specifying components is to select all components tbb, tbbmalloc, tbbmalloc_proxy according to the official README. The conan package mimics this behaviour from what I can tell and also links all three components into onetbb::onetbb:

    ########## AGGREGATED GLOBAL TARGET WITH THE COMPONENTS #####################
    set_property(TARGET onetbb::onetbb PROPERTY INTERFACE_LINK_LIBRARIES TBB::tbbmalloc_proxy APPEND)
    set_property(TARGET onetbb::onetbb PROPERTY INTERFACE_LINK_LIBRARIES TBB::tbbmalloc APPEND)
    set_property(TARGET onetbb::onetbb PROPERTY INTERFACE_LINK_LIBRARIES TBB::tbb APPEND)

This means that target_link_libraries(train PRIVATE onetbb::onetbb) brings in all components.

To be fair, I do not know what exactly I needed from TBB to use parallel std algorithms with GCC so I went with the default. But even if only e.g. tbb was needed, I would expect that the linkage provided by the conan-package for onetbb works for all components. I do not quite understand why building and linking against all 3 components works as expected, but only tbbmalloc is not found at runtime (despite residing in the same folder as the other tbb libs). Is this an RPATH issue?

maichmueller avatar Mar 07 '24 13:03 maichmueller

Hi @maichmueller - I see, thanks for linking to the documentation.

the behaviour of find_package(TBB REQUIRED) is to find all components, but you still need to choose which targets to link against. From what I can see, the onetbb::onetbb target is generated by Conan's CMakeDeps generator but has no equivalent in the TBB documentation. We do have targets for the ones mentioned by the TBB documentation.

I think your problem has to do with linking against the conan-only onetbb::onetbb, when you should link against TBB::tbb , and only if you know you need the malloc_proxy, link against that one too.

find_package(TBB REQUIRED)
...
target_link_libraries(
        train
        PRIVATE
        onetbb::onetbb
)

should be:

find_package(TBB REQUIRED)
...
target_link_libraries(
        train
        PRIVATE
        TBB::tbb
)

I do not quite understand why building and linking against all 3 components works as expected, but only tbbmalloc is not found at runtime (despite residing in the same folder as the other tbb libs). Is this an RPATH issue?

I suspect that the way tbbmalloc is loaded at runtime is different than regular libraries. I can see some evidence here: https://github.com/oneapi-src/oneTBB/blob/9e401d119c9422775b2267cbf133f0446493ddf7/src/tbbmalloc/tbbmalloc.cpp#L27 , where dlopen() is used. dlopen may (or may not) follow slightly different rules or nuances than regular library loading. We could have a look, however I suspect in your case the solution is as above and only link against TBB::tbb

jcar87 avatar Mar 07 '24 13:03 jcar87

Hi @jcar87 ,

thanks for your help on this. I linked as you said now only to TBB::tbb which works out of the box. I am happy to leave it at that for my use case, but think that any user wishing to link against tbbmalloc would run into this problem again.

For completeness sake, I installed TBB via apt for some tests and noticed that my package would compensate for the missing libtbbmalloc by simply picking it up from the system-wide installation while libtbb would still be selected from the conan folder. Not sure which extra settings allow finding it in the system-wide install though and whether they are set by the package or whether using standard ubuntu search paths is already enough.

maichmueller avatar Mar 17 '24 19:03 maichmueller