Home > Software engineering >  having problems with the tbb library while compiling the papillo package on macOS
having problems with the tbb library while compiling the papillo package on macOS

Time:09-27

I'm trying to install scip via the Scip Optimization Suite. I build scip with Cmake and the Cmake part works just fine. The following error occurs when I do the make command.

Undefined symbols for architecture x86_64:
  "tbb::interface5::internal::task_base::destroy(tbb::task&)", referenced from:
      void tbb::parallel_invoke<papilo::ConstraintMatrix<double>::compress(bool)::'lambda'(), papilo::ConstraintMatrix<double>::compress(bool)::'lambda0'()>(double const&, papilo::ConstraintMatrix<double>::compress(bool)::'lambda'() const&, tbb::task_group_context&) in libpapilo-core.a(ConstraintMatrix.cpp.o)
      void tbb::parallel_invoke<papilo::ConstraintMatrix<double>::compress(bool)::'lambda1'(), papilo::ConstraintMatrix<double>::compress(bool)::'lambda2'(), papilo::ConstraintMatrix<double>::compress(bool)::'lambda3'(), papilo::ConstraintMatrix<double>::compress(bool)::'lambda4'(), papilo::ConstraintMatrix<double>::compress(bool)::'lambda5'()>(double const&, papilo::ConstraintMatrix<double>::compress(bool)::'lambda1'() const&, papilo::ConstraintMatrix<double>::compress(bool)::'lambda2'() const&, papilo::ConstraintMatrix<double>::compress(bool)::'lambda3'() const&, papilo::ConstraintMatrix<double>::compress(bool)::'lambda4'() const&, tbb::task_group_context&) in libpapilo-core.a(ConstraintMatrix.cpp.o)
      void tbb::parallel_invoke<papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda'(), papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda0'()>(double const&, papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda'() const&, tbb::task_group_context&) in libpapilo-core.a(ConstraintMatrix.cpp.o)
      void tbb::parallel_invoke<papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda1'(), papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda2'()>(double const&, papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda1'() const&, tbb::task_group_context&) in libpapilo-core.a(ConstraintMatrix.cpp.o)
      void tbb::parallel_invoke<papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda3'(), papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda4'()>(double const&, papilo::ConstraintMatrix<double>::deleteRowsAndCols(std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<papilo::RowActivity<double>, std::__1::allocator<papilo::RowActivity<double> > >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&, std::__1::vector<int, std::__1::allocator<int> >&)::'lambda3'() const&, tbb::task_group_context&) in libpapilo-core.a(ConstraintMatrix.cpp.o)
      void tbb::parallel_invoke<papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda'(), papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda0'()>(boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> const&, papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda'() const&, tbb::task_group_context&) in libpapilo-core.a(ConstraintMatrix.cpp.o)
      void tbb::parallel_invoke<papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda1'(), papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda2'(), papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda3'(), papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda4'(), papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda5'()>(boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> const&, papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda1'() const&, papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda2'() const&, papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda3'() const&, papilo::ConstraintMatrix<boost::multiprecision::number<boost::multiprecision::backends::gmp_float<35u>, (boost::multiprecision::expression_template_option)1> >::compress(bool)::'lambda4'() const&, tbb::task_group_context&) in libpapilo-core.a(ConstraintMatrix.cpp.o)
      ...
[...]

  "typeinfo for tbb::task", referenced from:
      typeinfo for tbb::empty_task in libpapilo-core.a(ConstraintMatrix.cpp.o)
      typeinfo for tbb::internal::function_invoker<papilo::ConstraintMatrix<double>::compress(bool)::'lambda0'()> in libpapilo-core.a(ConstraintMatrix.cpp.o)
      typeinfo for tbb::internal::function_invoker<papilo::ConstraintMatrix<double>::compress(bool)::'lambda'()> in libpapilo-core.a(ConstraintMatrix.cpp.o)
      typeinfo for tbb::internal::spawner<2ul, papilo::ConstraintMatrix<double>::compress(bool)::'lambda5'(), papilo::ConstraintMatrix<double>::compress(bool)::'lambda4'(), tbb::internal::parallel_invoke_helper::parallel_invoke_noop> in libpapilo-core.a(ConstraintMatrix.cpp.o)
      typeinfo for tbb::internal::function_invoker<papilo::ConstraintMatrix<double>::compress(bool)::'lambda4'()> in libpapilo-core.a(ConstraintMatrix.cpp.o)
      typeinfo for tbb::internal::spawner<2ul, papilo::ConstraintMatrix<double>::compress(bool)::'lambda3'(), papilo::ConstraintMatrix<double>::compress(bool)::'lambda2'(), tbb::internal::parallel_invoke_helper::parallel_invoke_noop> in libpapilo-core.a(ConstraintMatrix.cpp.o)
      typeinfo for tbb::internal::function_invoker<papilo::ConstraintMatrix<double>::compress(bool)::'lambda2'()> in libpapilo-core.a(ConstraintMatrix.cpp.o)
      ...
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [bin/papilo] Error 1
make[1]: *** [binaries/CMakeFiles/papilo-executable.dir/all] Error 2
make: *** [all] Error 2

I tried to reinstall tbb or specify the location of the tbb library in the makefile but nothing really helped.

Has someone had a similar problem and can help me?

Thanks in advance!

CodePudding user response:

Unfortunately, PaPILO requires TBB2020 and can not handle TBB2021 (at least for the current version 1.x).

Therefore I would recommend checking which TBB version you have installed and make sure you have a TBB2020 installed.

On the other hand, PaPILO builds a static TBB lib from the sources in external, if PaPILO doesn't find a TBB lib.

  • Related