14

I would like to know how to install TBB from source and make it work on a Linux system. I have had some problems when it comes using it, problems that don't appear if I install TBB via the package manager.

In the TBB webpage, there are some guidelines on how about to do this, like setting the LD_LIBRARY_PATH and CPATH variables, or sourcing the tbbvars.sh file. Even if I do that, when I try to compile an example g++ says that tbb is not found.

So my question is, is there an easy way to setup everything (compile the source code, what variables should I set...) in order to use TBB?

Thanks.

NOTE: The library version number when this question was asked was 2 (if I recall correctly). I have personally tested the solution up to version 4.1, but I think it should work too for current version 4.2 (update 3) since the building method remains the same.

Olivia Stork
  • 4,660
  • 5
  • 27
  • 40
Adri C.S.
  • 2,909
  • 5
  • 36
  • 63

2 Answers2

28

I have come with the solution. I'll post it here so it will help others with this topic.

  1. Download the latest stable source code and uncompress it, i.e in ~/tbbsrc

  2. Inside, type make. It should start compiling the tbb library and the memory allocators.

  3. The headers are in ~/tbbsrc/include

  4. Inside ~/tbbsrc/build will be two new folders, one for the release version and the other for the debug version. Those folders are named like architecture_ldVersion_g++Version_kernelVersion.

  5. I recommend setting some variables, for example in your ~/.bashrc file, like:

TBB_INSTALL_DIR = $HOME/tbbsrc
TBB_INCLUDE = $TBB_INSTALL_DIR/include
TBB_LIBRARY_RELEASE = $TBB_INSTALL_DIR/build/RELEASE_FOLDER
TBB_LIBRARY_DEBUG = $TBB_INSTALL_DIR/build/DEBUG_FOLDER
  1. Let's try a simple example:
// main.cpp
#include "tbb/task_scheduler_init.h"

int main(int argc, char* argv[]) {
    // tbb::task_scheduler_init init(tbb::task_scheduler_init::automatic);
    // implicit tbb::task_sheduler_init::automatic
    tbb::task_scheduler_init init;
    return 0;
}
  1. To compile, for example, with the release version:
g++ main.cpp -I$TBB_INCLUDE -Wl,-rpath,$TBB_LIBRARY_RELEASE -L$TBB_LIBRARY_RELEASE -ltbb

Note: with -Wl,-rpath,$TBB_LIBRARY_RELEASE, we are telling the dynamic linker where to find libtbb.so

  1. And that should work fine!

Best regards!

Installation for Apple clang 5.1: [thanks to rwols for the info]

Instead of typing make, type make compiler=clang or make compiler=clang stdlib=libc++

Olivia Stork
  • 4,660
  • 5
  • 27
  • 40
Adri C.S.
  • 2,909
  • 5
  • 36
  • 63
  • 1
    Yeah. Thats why you have to pass it with `-Wl`, so the linker "recognize it". This was tested both in Ubuntu and Windows with `g++ 4.4` and `g++ 4.7`. I haven't tested it with newer versions. – Adri C.S. Oct 11 '13 at 07:38
  • but isn't -W1 an option just providing info for warning? I did not write that option so I am curious... :) – Andry Oct 11 '13 at 07:40
  • 1
    Or... wait it is not W1 but Wl... l as "linker"!!! Yeah! Understood!!! Sorry and thank you very much – Andry Oct 11 '13 at 07:41
  • 1
    lol. It's tricky eh? I also have problems telling them apart :D – Adri C.S. Oct 11 '13 at 07:42
  • 1
    When you're on Apple clang version 5.1, instead of typing `make`, type `make compiler=clang` or `make compiler=clang stdlib=libc++`. – rwols Aug 09 '14 at 06:22
  • @rwols Thanks for the info. I'll update the answer accordingly. – Adri C.S. Aug 13 '14 at 17:45
  • It's strange that `make install` isn't supported. – Lewis Chan Apr 10 '19 at 07:54
10

https://github.com/wjakob/tbb seems to be the way to go.

git clone https://github.com/wjakob/tbb.git
cd tbb/build
cmake ..
make -j
sudo make install
Bob Baxley
  • 3,551
  • 1
  • 22
  • 28
  • Thanks! Much easier than Intel's git distribution, which has no install. I suggest also running "make test" though, just in case. – mathog Dec 06 '19 at 19:52
  • This installed, but my runtime then expects to find libtbb.so.2 which is missing. – Richard Whitehead Jul 14 '21 at 14:09
  • I fixed the missing file by adding the following line to `/etc/ld.so.conf`: `/opt/intel/openvino_2021.1.110/deployment_tools/inference_engine/external/tbb/lib/` and then calling `ldconfig`. – Richard Whitehead Jul 14 '21 at 14:36