mapillary / OpenSfM

Open source Structure-from-Motion pipeline
https://www.opensfm.org/
BSD 2-Clause "Simplified" License
3.42k stars 861 forks source link

error: no matching function for call to 'fpclassify' AND error: no matching function for call to 'hypot' #1071

Open Joeljensen28 opened 2 months ago

Joeljensen28 commented 2 months ago

I am trying to run python3 setup.py build, and am getting the following output:

8 warnings generated.
[ 98%] Linking CXX shared module parent/OpenSfM/opensfm/pysfm.cpython-39-darwin.so
13 warnings and 2 errors generated.
make[2]: *** [bundle/CMakeFiles/bundle_test.dir/test/reprojection_errors_test.cc.o] Error 1
make[1]: *** [bundle/CMakeFiles/bundle_test.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 98%] Built target pysfm
make: *** [all] Error 2
Traceback (most recent call last):
  File "parent/OpenSfM/setup.py", line 60, in <module>
    build_c_extension()
  File "parent/OpenSfM/setup.py", line 54, in build_c_extension
    subprocess.check_call(
  File "/opt/homebrew/Cellar/python@3.9/3.9.19_1/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 373, in check_call
    raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['make', '-j8']' returned non-zero exit status 2.

I scrolled up and found the two errors are /opt/homebrew/Cellar/ceres-solver/2.2.0_1/include/ceres/rotation.h:801:7: error: no matching function for call to 'fpclassify' and /opt/homebrew/Cellar/ceres-solver/2.2.0_1/include/ceres/rotation.h:799:19: error: no matching function for call to 'hypot'.

I looked into rotation.h and noted these functions are pulled from <cmath>. I tried executing these functions in a separate cpp file and had no issue.

A few things to note (unsure if related or not):

  1. I am using python 3.9
  2. I am using MacOS
  3. I set pyyaml to 5.3.1 in requirements.txt as I was having issues with 5.4
  4. I put add_definitions(-DVL_DISABLE_SSE2) into CMakeLists.txt as I was having issues with SSE2
  5. I also put set(OpenMP_libomp_LIBRARY "/opt/homebrew/opt/libomp/lib/libomp.dylib") and set(OpenMP_CXX_INCLUDE_DIR "/opt/homebrew/opt/libomp/include") in CMakeLists.txt
  6. I'm using set(CMAKE_CXX_STANDARD 17) in CMakeLists.txt
  7. I changed the directories in the #include statements in rotation.h to point to the correct directories of the specified files as such:
    #include "constants.h"
    #include "internal/euler_angles.h"
    #include "../../../../glog/0.6.0/include/glog/logging.h"

Any help on this would be greatly appreciated!