ceres-solver icon indicating copy to clipboard operation
ceres-solver copied to clipboard

cant find_package(Ceres REQUIRED) on macos !!!

Open chennuo0125-HIT opened this issue 1 year ago • 8 comments

macos version: Sonoma 14.2.1 problem: I make install ceres-solver 2.1.0 from source, and find_package(Ceres REQUIRED) in cmakelist demo, and I got follow problem:

CMake Error at /opt/homebrew/Cellar/cmake/3.28.1/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:230 (message):
  Could NOT find OpenMP_C (missing: OpenMP_C_FLAGS OpenMP_C_LIB_NAMES)
Call Stack (most recent call first):
  /opt/homebrew/Cellar/cmake/3.28.1/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:600 (_FPHSA_FAILURE_MESSAGE)
  /opt/homebrew/Cellar/cmake/3.28.1/share/cmake/Modules/FindOpenMP.cmake:580 (find_package_handle_standard_args)
  /opt/homebrew/Cellar/cmake/3.28.1/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)
  /opt/homebrew/lib/cmake/SuiteSparse_config/SuiteSparse_configConfig.cmake:68 (find_dependency)
  /opt/homebrew/Cellar/cmake/3.28.1/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)
  /opt/homebrew/lib/cmake/CXSparse/CXSparseConfig.cmake:78 (find_dependency)
  /opt/homebrew/Cellar/cmake/3.28.1/share/cmake/Modules/CMakeFindDependencyMacro.cmake:76 (find_package)
  /usr/local/lib/cmake/Ceres/CeresConfig.cmake:182 (find_dependency)
  CMakeLists.txt:124 (find_package)

but if I install ceres-solver 2.2.0 , and the result is ok.

why does this problem happen ?

chennuo0125-HIT avatar Jan 05 '24 06:01 chennuo0125-HIT

@sandwichmaker could you tell me why above problem occured ?

chennuo0125-HIT avatar Jan 17 '24 13:01 chennuo0125-HIT

The error stems from your Homebrew version of SuiteSparse not from Ceres:

/opt/homebrew/lib/cmake/SuiteSparse_config/SuiteSparse_configConfig.cmake:68 (find_dependency)

For some reason, the OpenMP C component is not usable. You could check the CMake configure log to identify the issue.

sergiud avatar Jan 17 '24 13:01 sergiud

@sergiud if not ceres proplem, why can i replace ceres version solve the problem ?

chennuo0125-HIT avatar Jan 17 '24 14:01 chennuo0125-HIT

@sergiud ceres 2.1.0 is ok, but ceres 2.2.0 not ok

chennuo0125-HIT avatar Jan 17 '24 14:01 chennuo0125-HIT

Three people around me have all experienced this problem,we just run "brew update" and the problem occurred, my home brew version: Homebrew 4.0.23-12-ge986264

chennuo0125-HIT avatar Jan 17 '24 14:01 chennuo0125-HIT

While Ceres 2.1.0 supported OpenMP as one of the threading backends, Ceres 2.2.0 removed OpenMP support in 06bfe6ffacecd09f82ca54e761117aa7d9bca565. This is likely the reason why the issue no longer occurs in Ceres 2.2.0. However, even in 2.1.0 Ceres did nothing special here: https://github.com/ceres-solver/ceres-solver/blob/f68321e7de8929fbcdb95dd42877531e64f72f66/cmake/CeresThreadingModels.cmake#L55 Therefore, I suggest reporting the issue to Homebrew or SuiteSparse maintainers. There seems to be a conflict in the way OpenMP components are requested and used. Relying on a language specific version of OpenMP in the dependency chain can generally cause problems, e.g., if a CMake project that enables the use of a CXX compiler only also depends on a component requiring a C compiler (and vice versa).

sergiud avatar Jan 17 '24 14:01 sergiud

@sergiud how can i remove OpenMP support in ceres 2.1.0 ?

chennuo0125-HIT avatar Jan 18 '24 00:01 chennuo0125-HIT

You could try explicitly setting the CERES_THREADING_MODEL CMake variable, e.g., to CXX_THREADS to avoid Ceres invoking the above find_package call. Alternatively, you can unconditionally set the threading backend to CXX_THREADS here: https://github.com/ceres-solver/ceres-solver/blob/f68321e7de8929fbcdb95dd42877531e64f72f66/cmake/CeresThreadingModels.cmake#L65-L82

sergiud avatar Jan 18 '24 09:01 sergiud

I'm closing the issue as there are no more updates.

sergiud avatar Jul 09 '24 09:07 sergiud