在 macOS TBB 上使用 cmake 安装 SCIP 7.0.3 错误

问题描述

我正在尝试在我的 Mac 机器上构建 SCIP 7.0.3 opt 套件,但我遇到了一些问题。

我正在使用 CMake 生成 make Makefile,一旦我输入 make,我在链接步骤中失败了。我在这里附上日志

Consolidate compiler generated dependencies of target papilolib
[100%] Linking CXX shared library ../../lib/libpapilo.dylib
ld: warning: object file (../libclusol.a(lusol.f90.o)) was built for newer macOS version (11.4) than being linked (11.0)
ld: warning: object file (../libclusol.a(lusol6b.f.o)) was built for newer macOS version (11.4) than being linked (11.0)
ld: warning: object file (../libclusol.a(lusol8b.f.o)) was built for newer macOS version (11.4) than being linked (11.0)
ld: warning: object file (../libclusol.a(lusol_util.f.o)) was built for newer macOS version (11.4) than being linked (11.0)
ld: warning: object file (../libclusol.a(lusol7b.f.o)) was built for newer macOS version (11.4) than being linked (11.0)
Undefined symbols for architecture x86_64:
  "tbb::interface5::internal::task_base::destroy(tbb::task&)",referenced from:
      void tbb::parallel_invoke<papilo::ParallelRowDetection<double>::execute(papilo::Problem<double> const&,papilo::ProblemUpdate<double> const&,papilo::Num<double> const&,papilo::Reductions<double>&)::'lambda'(),papilo::ParallelRowDetection<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&)::'lambda0'(),papilo::Reductions<double>&)::'lambda1'()>(double const&,papilo::Reductions<double>&)::'lambda'() const&,papilo::Reductions<double>&)::'lambda0'() const&,tbb::task_group_context&) in papilolib.cpp.o
      void tbb::parallel_invoke<papilo::ParallelColDetection<double>::execute(papilo::Problem<double> const&,papilo::ParallelColDetection<double>::execute(papilo::Problem<double> const&,tbb::task_group_context&) in papilolib.cpp.o
      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 papilolib.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 papilolib.cpp.o
      void tbb::parallel_invoke<papilo::Problem<double>::compress(bool)::'lambda'(),papilo::Problem<double>::compress(bool)::'lambda0'(),papilo::Problem<double>::compress(bool)::'lambda1'()>(double const&,papilo::Problem<double>::compress(bool)::'lambda'() const&,papilo::Problem<double>::compress(bool)::'lambda0'() const&,tbb::task_group_context&) in papilolib.cpp.o
      
      void tbb::interface9::internal::dynamic_grainsize_mode<tbb::interface9::internal::adaptive_mode<tbb::interface9::internal::auto_partition_type> >::work_balance<tbb::interface9::internal::start_for<tbb::blocked_range<int>,papilo::ParallelColDetection<double>::computeColHashes(papilo::ConstraintMatrix<double> const&,std::__1::vector<double,std::__1::allocator<double> > const&,unsigned int*)::'lambda'(tbb::blocked_range<int> const&),tbb::auto_partitioner const>,tbb::blocked_range<int> >(double&,tbb::interface9::internal::start_for<tbb::blocked_range<int>,tbb::auto_partitioner const>&) in papilolib.cpp.o
      void tbb::interface9::internal::partition_type_base<tbb::interface9::internal::auto_partition_type>::execute<tbb::interface9::internal::start_for<tbb::blocked_range<int>,papilo::Probing<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&)::'lambda'(tbb::blocked_range<int> const&),tbb::auto_partitioner const>&) in papilolib.cpp.o
      ...
  "tbb::internal::concurrent_vector_base_v3::internal_capacity() const",referenced from:
      papilo::Probing<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&) in papilolib.cpp.o
      papilo::DominatedCols<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&) in papilolib.cpp.o
      papilo::Sparsify<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&) in papilolib.cpp.o
  "tbb::internal::allocate_continuation_proxy::allocate(unsigned long) const",referenced from:
      void tbb::interface9::internal::partition_type_base<tbb::interface9::internal::auto_partition_type>::execute<tbb::interface9::internal::start_for<tbb::blocked_range<int>,papilo::ParallelRowDetection<double>::computeRowHashes(papilo::ConstraintMatrix<double> const&,tbb::auto_partitioner const>&) in papilolib.cpp.o
      void tbb::interface9::internal::dynamic_grainsize_mode<tbb::interface9::internal::adaptive_mode<tbb::interface9::internal::auto_partition_type> >::work_balance<tbb::interface9::internal::start_for<tbb::blocked_range<int>,papilo::Reductions<double>&)::'lambda0'(tbb::blocked_range<int> const&),tbb::auto_partitioner const>&) in papilolib.cpp.o
      ...
  "tbb::internal::allocate_root_with_context_proxy::free(tbb::task&) const",referenced from:
      tbb::interface9::internal::start_for<tbb::blocked_range<int>,tbb::auto_partitioner const>::run(tbb::blocked_range<int> const&,unsigned int*)::'lambda'(tbb::blocked_range<int> const&) const&,tbb::auto_partitioner const&) in papilolib.cpp.o
      tbb::interface9::internal::start_for<tbb::blocked_range<int>,papilo::Reductions<double>&)::'lambda'(tbb::blocked_range<int> const&) const&,papilo::Reductions<double>&)::'lambda0'(tbb::blocked_range<int> const&) const&,papilo::DominatedCols<double>::execute(papilo::Problem<double> const&,papilo::Sparsify<double>::execute(papilo::Problem<double> const&,tbb::auto_partitioner const&) in papilolib.cpp.o
      ...
  "tbb::internal::allocate_root_with_context_proxy::allocate(unsigned long) const",tbb::task_group_context&) in papilolib.cpp.o
      tbb::interface9::internal::start_for<tbb::blocked_range<int>,tbb::auto_partitioner const&) in papilolib.cpp.o
      void tbb::parallel_invoke<papilo::ParallelColDetection<double>::execute(papilo::Problem<double> const&,tbb::auto_partitioner const&) in papilolib.cpp.o
      ...
  "typeinfo for tbb::task",referenced from:
      typeinfo for tbb::empty_task in papilolib.cpp.o
      typeinfo for tbb::internal::function_invoker<papilo::ParallelRowDetection<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&)::'lambda1'()> in papilolib.cpp.o
      typeinfo for tbb::internal::function_invoker<papilo::ParallelRowDetection<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&)::'lambda0'()> in papilolib.cpp.o
      typeinfo for tbb::interface9::internal::start_for<tbb::blocked_range<int>,tbb::auto_partitioner const> in papilolib.cpp.o
      typeinfo for tbb::interface9::internal::flag_task in papilolib.cpp.o
      typeinfo for tbb::internal::function_invoker<papilo::ParallelRowDetection<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&)::'lambda'()> in papilolib.cpp.o
      typeinfo for tbb::internal::function_invoker<papilo::ParallelColDetection<double>::execute(papilo::Problem<double> const&,papilo::Reductions<double>&)::'lambda1'()> in papilolib.cpp.o
      ...
  "__gfortran_generate_error",referenced from:
      ___lusol_MOD_lu1rec in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu6chk.constprop.0 in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu8rpc in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu1fac in libclusol.a(lusol.f90.o)
  "__gfortran_st_write",referenced from:
      ___lusol_MOD_lu1rec in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu6chk.constprop.0 in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu8rpc in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu1fac in libclusol.a(lusol.f90.o)
      _lu6prt_ in libclusol.a(lusol6b.f.o)
      _lu8mod_ in libclusol.a(lusol8b.f.o)
      _lu8adc_ in libclusol.a(lusol8b.f.o)
      ...
  "__gfortran_st_write_done",referenced from:
      ___lusol_MOD_lu1rec in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu6chk.constprop.0 in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu8rpc in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu1fac in libclusol.a(lusol.f90.o)
      _lu6prt_ in libclusol.a(lusol6b.f.o)
      _lu8mod_ in libclusol.a(lusol8b.f.o)
      _lu8adc_ in libclusol.a(lusol8b.f.o)
      ...
  "__gfortran_stop_string",referenced from:
      ___lusol_MOD_lu8rpc in libclusol.a(lusol.f90.o)
  "__gfortran_transfer_array_write",referenced from:
      _lu6prt_ in libclusol.a(lusol6b.f.o)
  "__gfortran_transfer_character_write",referenced from:
      ___lusol_MOD_lu6chk.constprop.0 in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu8rpc in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu1fac in libclusol.a(lusol.f90.o)
      _lu7rnk_ in libclusol.a(lusol_util.f.o)
      _lu6chk_ in libclusol.a(lusol_util.f.o)
      _lu1fad_ in libclusol.a(lusol_util.f.o)
      _lu1fac_ in libclusol.a(lusol_util.f.o)
      ...
  "__gfortran_transfer_integer_write",referenced from:
      ___lusol_MOD_lu1rec in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu6chk.constprop.0 in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu8rpc in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu1fac in libclusol.a(lusol.f90.o)
      _lu6prt_ in libclusol.a(lusol6b.f.o)
      _lu8mod_ in libclusol.a(lusol8b.f.o)
      _lu8adc_ in libclusol.a(lusol8b.f.o)
      ...
  "__gfortran_transfer_logical_write",referenced from:
      ___lusol_MOD_lu1rec in libclusol.a(lusol.f90.o)
      _lu1rec_ in libclusol.a(lusol_util.f.o)
  "__gfortran_transfer_real_write",referenced from:
      ___lusol_MOD_lu8rpc in libclusol.a(lusol.f90.o)
      ___lusol_MOD_lu1fac in libclusol.a(lusol.f90.o)
      _lu6prt_ in libclusol.a(lusol6b.f.o)
      _lu8adc_ in libclusol.a(lusol8b.f.o)
      _lu8adr_ in libclusol.a(lusol8b.f.o)
      _lu1fad_ in libclusol.a(lusol_util.f.o)
      _lu1fac_ in libclusol.a(lusol_util.f.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]: *** [lib/libpapilo.dylib] Error 1
make[1]: *** [papilo/binaries/CMakeFiles/papilolib.dir/all] Error 2
make: *** [all] Error 2

我使用命令 brew install tbb

在我的 Mac 上安装了 TBB

由于我无法粘贴完整日志,因此必须在中间修剪上述日志。

完整日志https://pastebin.com/p7YL4161

编辑:我使用的是 macOS 最新版本和我的 cmake -DCMAKE_BUILD_TYPE=Release -DIPOPT=off ..

-- Build type: Release
SoPlex with Boost CPP multiprecision libraries.
-- Could NOT find Quadmath (missing: Quadmath_LIBRARY Quadmath_INCLUDE_DIR) 
-- Found Boost: /usr/local/lib/cmake/Boost-1.76.0/BoostConfig.cmake (found suitable version "1.76.0",minimum required is "1.58.0") found components: program_options 
-- Found Boost: /usr/local/lib/cmake/Boost-1.76.0/BoostConfig.cmake (found version "1.76.0")  
-- Could NOT find Quadmath (missing: Quadmath_LIBRARY Quadmath_INCLUDE_DIR) 
-- Git hash: e567fef
-- Build shared libraries: ON
-- Build type: Release
-- Finding ZLIB
-- Finding ZLIB - found
-- Finding Readline
-- Finding Readline - found
-- Finding GMP
-- Finding GMP - found
-- Finding PAPILO
-- Finding PAPILO - found
-- Finding Solver "spx"
-- Finding Soplex
-- Finding SOPLEX - found
-- Support CLP: OFF
-- Support CPLEX: OFF
-- Support GLOP: OFF
-- Support GUROBI: OFF
-- Support XPRESS: OFF
-- Support MOSEK: OFF
-- Support QSO: OFF
-- Finding symmetry computation program "bliss"
-- Finding BLISS
-- Could NOT find BLISS (missing: BLISS_INCLUDE_DIR BLISS_INCLUDE_Dirs BLISS_LIBRARIES BLISS_DEFinitioNS) 
-- Finding BLISS - not found
-- CodeCoverage: OFF
-- Finding ZIMPL
-- Finding ZIMPL - found
-- Support IPOPT: OFF
-- Support WORHP: OFF
-- Looking for FE_DOWNWARD
-- Looking for FE_DOWNWARD - found
-- Finding CRITERION
-- Could NOT find CRITERION (missing: CRITERION_LIBRARY CRITERION_INCLUDE_DIR) 
-- Finding CRITERION - not found
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_VISIBILITY - Success
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY
-- Performing Test COMPILER_HAS_HIDDEN_INLINE_VISIBILITY - Success
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR
-- Performing Test COMPILER_HAS_DEPRECATED_ATTR - Success
-- Could NOT find CRITERION (missing: CRITERION_LIBRARY CRITERION_INCLUDE_DIR) 
-- Support AMPL: OFF
-- Build shared libraries: ON
-- Build type: Release
-- Found PkgConfig: /usr/local/bin/pkg-config (found version "0.29.2") 
-- Found GSL: /usr/local/Cellar/gsl/2.6/include (found suitable version "2.6",minimum required is "2.0") 
-- Could NOT find CLIQUER (missing: CLIQUER_INCLUDE_Dirs CLIQUER_LIBRARIES) 
-- Could NOT find BLISS (missing: BLISS_INCLUDE_DIR BLISS_INCLUDE_Dirs BLISS_LIBRARIES BLISS_DEFinitioNS) 
-- Found Boost: /usr/local/lib/cmake/Boost-1.76.0/BoostConfig.cmake (found version "1.76.0") found components: iostreams serialization program_options 
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_ZLIB
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_ZLIB - Success
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_BZIP2
-- Performing Test PAPILO_USE_BOOST_IOSTREAMS_WITH_BZIP2 - Success
-- Linking solvers: SCIP;SoPlex
-- The following OPTIONAL packages have been found:

 * Threads
 * BLAS
 * PkgConfig
 * GSL (required version >= 2.0)

-- The following required packages have been found:

 * BISON
 * FLEX
 * TBB
 * Readline
 * PAPILO
 * ZIMPL
 * ZLIB
 * GMP
 * SCIP
 * SOPLEX
 * boost_headers (required version == 1.76.0)
 * Boost

-- The following OPTIONAL packages have not been found:

 * Quadmath
 * CRITERION
 * CLIQUER
 * Hmetis
 * BLISS

-- Configuring done
-- Generating done
-- Build files have been written to: /Users/username/Downloads/scipoptsuite-7.0.3/build

解决方法

编译失败,因为您的 tbb 库中缺少一个内部函数。

TBB 基于 oneapi 从 tbb -> oneTBB 进行了切换。我们目前不支持 oneTBB,但正在努力。

https://formulae.brew.sh/formula/tbb Tbb 链接到 oneTBB,因此您需要安装 tbb@2020 (https://formulae.brew.sh/formula/tbb@2020)。

也许您需要在此之前删除或取消链接 tbb 才能运行构建。由于缓存问题,请记住在尝试重新编译之前删除构建目录。

能否请您尝试一下,然后报告是否有效。

菲利普