error: no matching function for call to 'fpclassify' AND error: no matching function for call to 'hypot'
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/[email protected]/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):
- I am using python 3.9
- I am using MacOS
- I set
pyyamlto5.3.1inrequirements.txtas I was having issues with5.4 - I put
add_definitions(-DVL_DISABLE_SSE2)intoCMakeLists.txtas I was having issues with SSE2 - I also put
set(OpenMP_libomp_LIBRARY "/opt/homebrew/opt/libomp/lib/libomp.dylib")andset(OpenMP_CXX_INCLUDE_DIR "/opt/homebrew/opt/libomp/include")in CMakeLists.txt - I'm using
set(CMAKE_CXX_STANDARD 17)inCMakeLists.txt - I changed the directories in the
#includestatements inrotation.hto 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!
How about modifying the following line in the function at line 801 in 'rotation.h':
const T theta = hypot(angle_axis[0], angle_axis[1], angle_axis[2]);
to
const T theta_squared = angle_axis[0] * angle_axis[0] +angle_axis[1] * angle_axis[1] +angle_axis[2] * angle_axis[2];
const T theta = sqrt(theta_squared);