Linker errors on OpenCV 4.5.5 SFM module

  • OpenCV => 4.5.5 (latest)
  • Operating System / Platform => Ubuntu 20.04.4 LTS 64 bits on WSL2 for Windows 10 64 bits
  • Compiler => g++ 11.1 (Ubuntu 11.1.0-1ubuntu1~20.04)
  • Build System: CMake 3.23rc5, Unix Makefiles generator

Greetings, I have built OpenCV 4.5.5 from source with the sfm contrib module and I am trying to use it for scene reconstruction. However, whenever there is a call to cv::sfm::reconstruct anywhere in the source code, I get the following linker error:

/usr/bin/ld: /usr/local/lib/x86_64-linux-gnu/libopencv_sfm.so.4.5.5: undefined reference to `cv::FlannBasedMatcher::add(cv::_InputArray const&)'
/usr/bin/ld: /usr/local/lib/x86_64-linux-gnu/libopencv_sfm.so.4.5.5: undefined reference to `cv::Mat::copyTo(cv::_OutputArray const&) const'
/usr/bin/ld: /usr/local/lib/x86_64-linux-gnu/libopencv_sfm.so.4.5.5: undefined reference to `cv::DescriptorMatcher::knnMatch(cv::_InputArray const&, std::vector<std::vector<cv::DMatch, std::allocator<cv::DMatch> >, std::allocator<std::vector<cv::DMatch, std::allocator<cv::DMatch> > > >&, int, cv::_InputArray const&, bool)'
/usr/bin/ld: /usr/local/lib/x86_64-linux-gnu/libopencv_sfm.so.4.5.5: undefined reference to `libmv::MotionFromEssential(Eigen::Matrix<double, 3, 3, 0, 3, 3> const&, std::__debug::vector<Eigen::Matrix<double, 3, 3, 0, 3, 3>, std::allocator<Eigen::Matrix<double, 3, 3, 0, 3, 3> > >*, std::__debug::vector<Eigen::Matrix<double, 3, 1, 0, 3, 1>, std::allocator<Eigen::Matrix<double, 3, 1, 0, 3, 1> > >*)'
/usr/bin/ld: /usr/local/lib/x86_64-linux-gnu/libopencv_sfm.so.4.5.5: undefined reference to `libmv::correspondence::nRobustViewMatching::computeCrossMatch(std::__debug::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)'
collect2: error: ld returned 1 exit status

All functions which failed to link are called from the SFM module.

I have checked that cv::FlannBasedMatcher::add works outside the SFM module’s source files and it does, I get no linker error and the program builds successfully.

I have built and installed the following dependencies from source:

The following libs were installed through apt:

  • BLAS & LAPACK (OpenBLAS implementation) [libopenblas-dev/focal-updates,now 0.3.8+ds-1ubuntu0.20.04.1 amd64]

Hi,
Can you show us cmake output?
Why don’t you use windows to compile opencv_contrib with ceres?

I was having trouble compiling SuiteSparse (dep of Ceres) with MSVC, as it still has no official support for Windows builds. So I decided to switch to my WSL2 virtual machine.

Here’s the CMake output for OpenCV:

-- Detected processor: x86_64
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found suitable version "1.2.11", minimum required is "1.2.3")
-- Could NOT find OpenJPEG (minimal suitable version: 2.0, recommended version >= 2.3.1). OpenJPEG will be built from sources
-- OpenJPEG: VERSION = 2.4.0, BUILD = opencv-4.5.5-openjp2-2.4.0
-- OpenJPEG libraries will be built from sources: libopenjp2 (version "2.4.0")
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.11")
-- found Intel IPP (ICV version): 2020.0.0 [2020.0.0 Gold]
-- at: /home/fab/repos/opencv/opencv-4.5.5/build/3rdparty/ippicv/ippicv_lnx/icv
-- found Intel IPP Integration Wrappers sources: 2020.0.0
-- at: /home/fab/repos/opencv/opencv-4.5.5/build/3rdparty/ippicv/ippicv_lnx/iw
-- LAPACK(OpenBLAS): LAPACK_LIBRARIES: /usr/lib/x86_64-linux-gnu/libopenblas.so
-- LAPACK(OpenBLAS): Support is enabled.
-- Using whitelist: opencv_calib3d;opencv_core;opencv_features2d;opencv_imgcodecs;opencv_imgproc;opencv_sfm;opencv_xfeatures2d
-- Module opencv_dnn disabled by whitelist
-- Module opencv_highgui disabled by whitelist
-- Module opencv_java_bindings_generator disabled by whitelist
-- Module opencv_js_bindings_generator disabled by whitelist
-- Module opencv_ml disabled by whitelist
-- Module opencv_objc_bindings_generator disabled by whitelist
-- Module opencv_objdetect disabled by whitelist
-- Module opencv_photo disabled by whitelist
-- Module opencv_python_bindings_generator disabled by whitelist
-- Module opencv_python_tests disabled by whitelist
-- Module opencv_stitching disabled by whitelist
-- Module opencv_ts disabled by whitelist
-- Module opencv_video disabled by whitelist
-- Module opencv_videoio disabled by whitelist
-- Allocator metrics storage type: 'long long'
--
-- General configuration for OpenCV 4.5.5 =====================================
--   Version control:               4.5.5-1-g33d0cce870
--
--   Extra modules:
--     Location (extra):            /home/fab/repos/opencv/opencv_contrib-4.5.5/modules/xfeatures2d
--     Version control (extra):     4.5.5
--
--     Location (extra):            /home/fab/repos/opencv/opencv_contrib-4.5.5/modules/sfm
--     Version control (extra):     4.5.5
--
--   Platform:
--     Timestamp:                   2022-04-14T01:15:03Z
--     Host:                        Linux 5.10.16.3-microsoft-standard-WSL2 x86_64
--     CMake:                       3.23.0-rc5
--     CMake generator:             Unix Makefiles
--     CMake build tool:            /usr/bin/make
--     Configuration:               Release
--
--   CPU/HW features:
--     Baseline:                    SSE SSE2 SSE3
--       requested:                 SSE3
--     Dispatched code generation:  SSE4_1 SSE4_2 FP16 AVX AVX2 AVX512_SKX
--       requested:                 SSE4_1 SSE4_2 AVX FP16 AVX2 AVX512_SKX
--       SSE4_1 (14 files):         + SSSE3 SSE4_1
--       SSE4_2 (1 files):          + SSSE3 SSE4_1 POPCNT SSE4_2
--       FP16 (0 files):            + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 AVX
--       AVX (3 files):             + SSSE3 SSE4_1 POPCNT SSE4_2 AVX
--       AVX2 (27 files):           + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2
--       AVX512_SKX (3 files):      + SSSE3 SSE4_1 POPCNT SSE4_2 FP16 FMA3 AVX AVX2 AVX_512F AVX512_COMMON AVX512_SKX
--
--   C/C++:
--     Built as dynamic libs?:      YES
--     C++ standard:                11
--     C++ Compiler:                /usr/bin/g++  (ver 11.1.0)
--     C++ flags (Release):         -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -flto  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -O3 -DNDEBUG  -DNDEBUG -g1
--     C++ flags (Debug):           -fsigned-char -W -Wall -Werror=return-type -Werror=non-virtual-dtor -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wundef -Winit-self -Wpointer-arith -Wshadow -Wsign-promo -Wuninitialized -Wsuggest-override -Wno-delete-non-virtual-dtor -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -flto  -msse -msse2 -msse3 -fvisibility=hidden -fvisibility-inlines-hidden -g  -O0 -DDEBUG -D_DEBUG
--     C Compiler:                  /usr/bin/cc
--     C flags (Release):           -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -flto  -msse -msse2 -msse3 -fvisibility=hidden -O3 -DNDEBUG  -DNDEBUG -g1
--     C flags (Debug):             -fsigned-char -W -Wall -Werror=return-type -Werror=address -Werror=sequence-point -Wformat -Werror=format-security -Wmissing-declarations -Wmissing-prototypes -Wstrict-prototypes -Wundef -Winit-self -Wpointer-arith -Wshadow -Wuninitialized -Wno-comment -Wimplicit-fallthrough=3 -Wno-strict-overflow -fdiagnostics-show-option -Wno-long-long -pthread -fomit-frame-pointer -ffunction-sections -fdata-sections -flto  -msse -msse2 -msse3 -fvisibility=hidden -g  -O0 -DDEBUG -D_DEBUG
--     Linker flags (Release):      -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a   -Wl,--gc-sections -Wl,--as-needed
--     Linker flags (Debug):        -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a   -Wl,--gc-sections -Wl,--as-needed
--     ccache:                      NO
--     Precompiled headers:         NO
--     Extra dependencies:          dl m pthread rt
--     3rdparty dependencies:
--
--   OpenCV modules:
--     To be built:                 calib3d core features2d flann imgcodecs imgproc sfm xfeatures2d
--     Disabled:                    world
--     Disabled by dependency:      dnn highgui java_bindings_generator js_bindings_generator ml objc_bindings_generator objdetect photo python_bindings_generator python_tests stitching ts video videoio
--     Unavailable:                 gapi java python2 python3
--     Applications:                -
--     Documentation:               NO
--     Non-free algorithms:         YES
--
--   GUI:
--
--   Media I/O:
--     ZLib:                        /usr/lib/x86_64-linux-gnu/libz.so (ver 1.2.11)
--     JPEG:                        /usr/lib/x86_64-linux-gnu/libjpeg.so (ver 80)
--     WEBP:                        /usr/lib/x86_64-linux-gnu/libwebp.so (ver encoder: 0x020e)
--     PNG:                         /usr/lib/x86_64-linux-gnu/libpng.so (ver 1.6.37)
--     TIFF:                        /usr/lib/x86_64-linux-gnu/libtiff.so (ver 42 / 4.1.0)
--     JPEG 2000:                   build (ver 2.4.0)
--     HDR:                         YES
--     SUNRASTER:                   YES
--     PXM:                         YES
--     PFM:                         YES
--
--   Video I/O:
--     v4l/v4l2:                    YES (linux/videodev2.h)
--
--   Parallel framework:            pthreads
--
--   Trace:                         YES (with Intel ITT)
--
--   Other third-party libraries:
--     Intel IPP:                   2020.0.0 Gold [2020.0.0]
--            at:                   /home/fab/repos/opencv/opencv-4.5.5/build/3rdparty/ippicv/ippicv_lnx/icv
--     Intel IPP IW:                sources (2020.0.0)
--               at:                /home/fab/repos/opencv/opencv-4.5.5/build/3rdparty/ippicv/ippicv_lnx/iw
--     Lapack:                      YES (/usr/lib/x86_64-linux-gnu/libopenblas.so)
--     Eigen:                       YES (ver 3.4.0)
--     Custom HAL:                  NO
--     Protobuf:                    build (3.19.1)
--
--   OpenCL:                        YES (no extra features)
--     Include path:                /home/fab/repos/opencv/opencv-4.5.5/3rdparty/include/opencl/1.2
--     Link libraries:              Dynamic load
--
--   Python (for build):            /usr/bin/python2.7
--
--   Install to:                    /usr/local
-- -----------------------------------------------------------------
--
-- Verifying WITH_1394=OFF => 'HAVE_DC1394_2'=FALSE
-- Verifying WITH_AVFOUNDATION= => 'HAVE_AVFOUNDATION'=FALSE
-- Verifying WITH_CAP_IOS= => 'HAVE_CAP_IOS'=FALSE
-- Verifying WITH_CPUFEATURES= => 'HAVE_CPUFEATURES'=FALSE
-- Verifying WITH_VTK=OFF => 'HAVE_VTK'=FALSE
-- Verifying WITH_CUDA=OFF => 'HAVE_CUDA'=FALSE
-- Verifying WITH_CUFFT= => 'HAVE_CUFFT'=FALSE
-- Verifying WITH_CUBLAS= => 'HAVE_CUBLAS'=FALSE
-- Verifying WITH_CUDNN= => 'HAVE_CUDNN'=FALSE
-- Verifying WITH_NVCUVID= => 'HAVE_NVCUVID'=FALSE
-- Verifying WITH_EIGEN=ON => 'HAVE_EIGEN'=TRUE
-- Verifying WITH_FFMPEG=OFF => 'HAVE_FFMPEG'=FALSE
-- Verifying WITH_GSTREAMER=OFF => 'HAVE_GSTREAMER;AND;GSTREAMER_VERSION;VERSION_GREATER;0.99'=FALSE
-- Verifying WITH_GTK=OFF => 'HAVE_GTK'=FALSE
-- Verifying WITH_GTK_2_X=OFF => 'HAVE_GTK;AND;NOT;HAVE_GTK3'=FALSE
-- Verifying WITH_IPP=ON => 'HAVE_IPP'=TRUE
-- Verifying WITH_HALIDE=OFF => 'HAVE_HALIDE'=FALSE
-- Verifying WITH_VULKAN=OFF => 'HAVE_VULKAN'=FALSE
-- Verifying WITH_INF_ENGINE=OFF => 'INF_ENGINE_TARGET'=FALSE
-- Verifying WITH_NGRAPH=OFF => 'TARGET;ngraph::ngraph'=FALSE
-- Verifying WITH_WEBNN=OFF => 'HAVE_WEBNN'=FALSE
-- Verifying WITH_JASPER=OFF => 'HAVE_JASPER'=FALSE
-- Verifying WITH_OPENJPEG=ON => 'HAVE_OPENJPEG'=TRUE
-- Verifying WITH_JPEG=ON => 'HAVE_JPEG'=TRUE
-- Verifying WITH_WEBP=ON => 'HAVE_WEBP'=TRUE
-- Verifying WITH_OPENEXR=OFF => 'HAVE_OPENEXR'=FALSE
-- Verifying WITH_OPENGL=OFF => 'HAVE_OPENGL'=FALSE
-- Verifying WITH_OPENVX=OFF => 'HAVE_OPENVX'=FALSE
-- Verifying WITH_OPENNI=OFF => 'HAVE_OPENNI'=FALSE
-- Verifying WITH_OPENNI2=OFF => 'HAVE_OPENNI2'=FALSE
-- Verifying WITH_PNG=ON => 'HAVE_PNG'=TRUE
-- Verifying WITH_GDCM=OFF => 'HAVE_GDCM'=FALSE
-- Verifying WITH_PVAPI=OFF => 'HAVE_PVAPI'=FALSE
-- Verifying WITH_ARAVIS=OFF => 'HAVE_ARAVIS_API'=FALSE
-- Verifying WITH_QT=OFF => 'HAVE_QT'=FALSE
-- Verifying WITH_WIN32UI= => 'HAVE_WIN32UI'=FALSE
-- Verifying WITH_TBB=OFF => 'HAVE_TBB'=FALSE
-- Verifying WITH_HPX=OFF => 'HAVE_HPX'=FALSE
-- Verifying WITH_OPENMP=OFF => 'HAVE_OPENMP'=FALSE
-- Verifying WITH_PTHREADS_PF=ON => 'HAVE_PTHREADS_PF'=TRUE
-- Verifying WITH_TIFF=ON => 'HAVE_TIFF'=TRUE
-- Verifying WITH_V4L=ON => 'HAVE_CAMV4L;OR;HAVE_CAMV4L2;OR;HAVE_VIDEOIO'=TRUE
-- Verifying WITH_DSHOW= => 'HAVE_DSHOW'=FALSE
-- Verifying WITH_MSMF= => 'HAVE_MSMF'=FALSE
-- Verifying WITH_MSMF_DXVA= => 'HAVE_MSMF_DXVA'=FALSE
-- Verifying WITH_XIMEA=OFF => 'HAVE_XIMEA'=FALSE
-- Verifying WITH_UEYE=OFF => 'HAVE_UEYE'=FALSE
-- Verifying WITH_XINE=OFF => 'HAVE_XINE'=FALSE
-- Verifying WITH_CLP=OFF => 'HAVE_CLP'=FALSE
-- Verifying WITH_OPENCL=ON => 'HAVE_OPENCL'=TRUE
-- Verifying WITH_OPENCL_SVM=OFF => 'HAVE_OPENCL_SVM'=FALSE
-- Verifying WITH_OPENCLAMDFFT=OFF => 'HAVE_CLAMDFFT'=FALSE
-- Verifying WITH_OPENCLAMDBLAS=OFF => 'HAVE_CLAMDBLAS'=FALSE
-- Verifying WITH_DIRECTX= => 'HAVE_DIRECTX'=FALSE
-- Verifying WITH_OPENCL_D3D11_NV= => 'HAVE_OPENCL_D3D11_NV'=FALSE
-- Verifying WITH_LIBREALSENSE=OFF => 'HAVE_LIBREALSENSE'=FALSE
-- Verifying WITH_VA=OFF => 'HAVE_VA'=FALSE
-- Verifying WITH_VA_INTEL=OFF => 'HAVE_VA_INTEL'=FALSE
-- Verifying WITH_MFX=OFF => 'HAVE_MFX'=FALSE
-- Verifying WITH_GDAL=OFF => 'HAVE_GDAL'=FALSE
-- Verifying WITH_GPHOTO2=OFF => 'HAVE_GPHOTO2'=FALSE
-- Verifying WITH_LAPACK=ON => 'HAVE_LAPACK'=TRUE
-- Verifying WITH_ITT=ON => 'HAVE_ITT'=TRUE
-- Verifying WITH_PROTOBUF=ON => 'HAVE_PROTOBUF'=TRUE
-- Verifying WITH_IMGCODEC_HDR=ON => 'HAVE_IMGCODEC_HDR'=TRUE
-- Verifying WITH_IMGCODEC_SUNRASTER=ON => 'HAVE_IMGCODEC_SUNRASTER'=TRUE
-- Verifying WITH_IMGCODEC_PXM=ON => 'HAVE_IMGCODEC_PXM'=TRUE
-- Verifying WITH_IMGCODEC_PFM=ON => 'HAVE_IMGCODEC_PFM'=TRUE
-- Verifying WITH_QUIRC=ON => 'HAVE_QUIRC'=TRUE
-- Verifying WITH_ANDROID_MEDIANDK= => 'HAVE_ANDROID_MEDIANDK'=FALSE
-- Verifying WITH_ANDROID_NATIVE_CAMERA= => 'HAVE_ANDROID_NATIVE_CAMERA'=FALSE
-- Verifying WITH_TENGINE= => 'HAVE_TENGINE'=FALSE
-- Verifying WITH_ONNX=OFF => 'HAVE_ONNX'=FALSE
-- Configuring done
-- Generating done

And the cache entries:

-- Cache values
ANT_EXECUTABLE:FILEPATH=
BUILD_CUDA_STUBS:BOOL=OFF
BUILD_DOCS:BOOL=OFF
BUILD_EXAMPLES:BOOL=OFF
BUILD_IPP_IW:BOOL=ON
BUILD_ITT:BOOL=ON
BUILD_JASPER:BOOL=OFF
BUILD_JAVA:BOOL=OFF
BUILD_JPEG:BOOL=OFF
BUILD_LIST:STRING=core,imgproc,imgcodecs,calib3d,features2d,xfeatures2d,sfm
BUILD_OPENEXR:BOOL=OFF
BUILD_OPENJPEG:BOOL=OFF
BUILD_PACKAGE:BOOL=ON
BUILD_PERF_TESTS:BOOL=OFF
BUILD_PNG:BOOL=OFF
BUILD_PROTOBUF:BOOL=ON
BUILD_SHARED_LIBS:BOOL=ON
BUILD_TBB:BOOL=OFF
BUILD_TESTS:BOOL=ON
BUILD_TIFF:BOOL=OFF
BUILD_USE_SYMLINKS:BOOL=OFF
BUILD_WEBP:BOOL=OFF
BUILD_WITH_DEBUG_INFO:BOOL=ON
BUILD_WITH_DYNAMIC_IPP:BOOL=OFF
BUILD_ZLIB:BOOL=OFF
BUILD_opencv_apps:BOOL=OFF
BUILD_opencv_calib3d:BOOL=ON
BUILD_opencv_core:BOOL=ON
BUILD_opencv_dnn:BOOL=ON
BUILD_opencv_features2d:BOOL=ON
BUILD_opencv_flann:BOOL=ON
BUILD_opencv_gapi:BOOL=ON
BUILD_opencv_highgui:BOOL=ON
BUILD_opencv_imgcodecs:BOOL=ON
BUILD_opencv_imgproc:BOOL=ON
BUILD_opencv_java_bindings_generator:BOOL=ON
BUILD_opencv_js:BOOL=OFF
BUILD_opencv_js_bindings_generator:BOOL=ON
BUILD_opencv_ml:BOOL=ON
BUILD_opencv_objc_bindings_generator:BOOL=ON
BUILD_opencv_objdetect:BOOL=ON
BUILD_opencv_photo:BOOL=ON
BUILD_opencv_python_bindings_generator:BOOL=ON
BUILD_opencv_python_tests:BOOL=ON
BUILD_opencv_sfm:BOOL=ON
BUILD_opencv_stitching:BOOL=ON
BUILD_opencv_ts:BOOL=ON
BUILD_opencv_video:BOOL=ON
BUILD_opencv_videoio:BOOL=ON
BUILD_opencv_world:BOOL=OFF
BUILD_opencv_xfeatures2d:BOOL=ON
CCACHE_PROGRAM:FILEPATH=CCACHE_PROGRAM-NOTFOUND
CLAMDBLAS_INCLUDE_DIR:PATH=CLAMDBLAS_INCLUDE_DIR-NOTFOUND
CLAMDBLAS_ROOT_DIR:PATH=CLAMDBLAS_ROOT_DIR-NOTFOUND
CLAMDFFT_INCLUDE_DIR:PATH=CLAMDFFT_INCLUDE_DIR-NOTFOUND
CLAMDFFT_ROOT_DIR:PATH=CLAMDFFT_ROOT_DIR-NOTFOUND
CMAKE_BUILD_TYPE:STRING=Release
CMAKE_CONFIGURATION_TYPES:STRING=Debug;Release
CMAKE_INSTALL_PREFIX:PATH=/usr/local
CPU_BASELINE:STRING=SSE3
CPU_DISPATCH:STRING=SSE4_1;SSE4_2;AVX;FP16;AVX2;AVX512_SKX
CV_DISABLE_OPTIMIZATION:BOOL=OFF
CV_ENABLE_INTRINSICS:BOOL=ON
CV_TRACE:BOOL=ON
CXSparse_DIR:PATH=/usr/local/lib/x86_64-linux-gnu/CXSparse/cmake
Ceres_DIR:PATH=/usr/local/lib/x86_64-linux-gnu/cmake/Ceres
DC1394_INCLUDE:PATH=DC1394_INCLUDE-NOTFOUND
DC1394_LIBRARY:FILEPATH=DC1394_LIBRARY-NOTFOUND
ENABLE_BUILD_HARDENING:BOOL=OFF
ENABLE_CCACHE:BOOL=OFF
ENABLE_CONFIG_VERIFICATION:BOOL=ON
ENABLE_COVERAGE:BOOL=OFF
ENABLE_FAST_MATH:BOOL=OFF
ENABLE_FLAKE8:BOOL=OFF
ENABLE_GNU_STL_DEBUG:BOOL=ON
ENABLE_IMPL_COLLECTION:BOOL=OFF
ENABLE_INSTRUMENTATION:BOOL=OFF
ENABLE_LTO:BOOL=ON
ENABLE_NOISY_WARNINGS:BOOL=OFF
ENABLE_OMIT_FRAME_POINTER:BOOL=ON
ENABLE_PIC:BOOL=ON
ENABLE_PRECOMPILED_HEADERS:BOOL=OFF
ENABLE_PROFILING:BOOL=OFF
ENABLE_PYLINT:BOOL=OFF
ENABLE_SOLUTION_FOLDERS:BOOL=OFF
EXECUTABLE_OUTPUT_PATH:PATH=/home/fab/repos/opencv/opencv-4.5.5/build/bin
Eigen3_DIR:PATH=/usr/local/share/eigen3/cmake
GENERATE_ABI_DESCRIPTOR:BOOL=OFF
Gflags_DIR:PATH=/usr/local/lib/cmake/gflags
Glog_DIR:PATH=/usr/local/lib/x86_64-linux-gnu/cmake/glog
INSTALL_CREATE_DISTRIB:BOOL=OFF
INSTALL_C_EXAMPLES:BOOL=OFF
INSTALL_PYTHON_EXAMPLES:BOOL=OFF
INSTALL_TESTS:BOOL=OFF
INSTALL_TO_MANGLED_PATHS:BOOL=OFF
LAPACK_CBLAS_H:STRING=cblas.h
LAPACK_IMPL:STRING=OpenBLAS
LAPACK_INCLUDE_DIR:PATH=/usr/include/x86_64-linux-gnu
LAPACK_LAPACKE_H:STRING=lapacke.h
LAPACK_LIBRARIES:STRING=/usr/lib/x86_64-linux-gnu/libopenblas.so
MKL_ROOT_DIR:PATH=MKL_ROOT_DIR-NOTFOUND
MKL_USE_SINGLE_DYNAMIC_LIBRARY:BOOL=OFF
MKL_WITH_OPENMP:BOOL=OFF
MKL_WITH_TBB:BOOL=OFF
OPENCL_FOUND:BOOL=ON
OPENCV_CONFIG_FILE_INCLUDE_DIR:PATH=/home/fab/repos/opencv/opencv-4.5.5/build
OPENCV_DISABLE_FILESYSTEM_SUPPORT:BOOL=OFF
OPENCV_DNN_CUDA:BOOL=OFF
OPENCV_DNN_OPENCL:BOOL=ON
OPENCV_DNN_PERF_CAFFE:BOOL=OFF
OPENCV_DNN_PERF_CLCAFFE:BOOL=OFF
OPENCV_DOWNLOAD_PATH:PATH=/home/fab/repos/opencv/opencv-4.5.5/.cache
OPENCV_DUMP_HOOKS_FLOW:BOOL=OFF
OPENCV_ENABLE_ALLOCATOR_STATS:BOOL=ON
OPENCV_ENABLE_ATOMIC_LONG_LONG:BOOL=ON
OPENCV_ENABLE_MEMALIGN:BOOL=ON
OPENCV_ENABLE_MEMORY_SANITIZER:BOOL=OFF
OPENCV_ENABLE_NONFREE:BOOL=ON
OPENCV_EXTRA_MODULES_PATH:PATH=/home/fab/repos/opencv/opencv_contrib-4.5.5/modules/xfeatures2d;/home/fab/repos/opencv/opencv_contrib-4.5.5/modules/sfm
OPENCV_FORCE_3RDPARTY_BUILD:BOOL=OFF
OPENCV_GAPI_GSTREAMER:BOOL=OFF
OPENCV_GENERATE_PKGCONFIG:BOOL=OFF
OPENCV_GENERATE_SETUPVARS:BOOL=ON
OPENCV_IPP_GAUSSIAN_BLUR:BOOL=OFF
OPENCV_JAVA_SOURCE_VERSION:STRING=
OPENCV_JAVA_TARGET_VERSION:STRING=
OPENCV_MATHJAX_RELPATH:STRING=https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0
OPENCV_PYTHON3_VERSION:BOOL=OFF
OPENCV_TIMESTAMP:STRING=2022-04-14T01:15:03Z
OPENCV_WARNINGS_ARE_ERRORS:BOOL=OFF
OPENEXR_INCLUDE_PATH:PATH=OPENEXR_INCLUDE_PATH-NOTFOUND
OPJ_DISABLE_TPSOT_FIX:BOOL=OFF
OPJ_USE_THREAD:BOOL=ON
OpenCV_HAL_DIR:PATH=OpenCV_HAL_DIR-NOTFOUND
OpenEXR_DIR:PATH=OpenEXR_DIR-NOTFOUND
OpenJPEG_DIR:PATH=OpenJPEG_DIR-NOTFOUND
PARALLEL_ENABLE_PLUGINS:BOOL=ON
PROTOBUF_UPDATE_FILES:BOOL=OFF
PYTHON2_EXECUTABLE:FILEPATH=/usr/bin/python2.7
PYTHON2_INCLUDE_DIR:PATH=/usr/include/python2.7
PYTHON2_INCLUDE_DIR2:PATH=
PYTHON2_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libpython2.7.so
PYTHON2_LIBRARY_DEBUG:FILEPATH=
PYTHON2_NUMPY_INCLUDE_DIRS:PATH=
PYTHON2_PACKAGES_PATH:PATH=lib/python2.7/dist-packages
PYTHON3_EXECUTABLE:FILEPATH=/usr/bin/python3
PYTHON3_INCLUDE_DIR:PATH=/usr/include/python3.8
PYTHON3_INCLUDE_DIR2:PATH=
PYTHON3_LIBRARY:FILEPATH=/usr/lib/x86_64-linux-gnu/libpython3.8.so
PYTHON3_LIBRARY_DEBUG:FILEPATH=
PYTHON3_NUMPY_INCLUDE_DIRS:PATH=
PYTHON3_PACKAGES_PATH:PATH=lib/python3.8/site-packages
SuiteSparse_DIR:PATH=/usr/local/lib/x86_64-linux-gnu/SuiteSparse/cmake
VA_INCLUDE_DIR:PATH=VA_INCLUDE_DIR-NOTFOUND
VTK_DIR:PATH=/usr/local/lib/x86_64-linux-gnu/cmake/vtk-9.1
WITH_1394:BOOL=OFF
WITH_ADE:BOOL=OFF
WITH_ARAVIS:BOOL=OFF
WITH_CLP:BOOL=OFF
WITH_CUDA:BOOL=OFF
WITH_EIGEN:BOOL=ON
WITH_FFMPEG:BOOL=OFF
WITH_FREETYPE:BOOL=OFF
WITH_GDAL:BOOL=OFF
WITH_GDCM:BOOL=OFF
WITH_GPHOTO2:BOOL=OFF
WITH_GSTREAMER:BOOL=OFF
WITH_GTK:BOOL=OFF
WITH_GTK_2_X:BOOL=OFF
WITH_HALIDE:BOOL=OFF
WITH_HPX:BOOL=OFF
WITH_IMGCODEC_HDR:BOOL=ON
WITH_IMGCODEC_PFM:BOOL=ON
WITH_IMGCODEC_PXM:BOOL=ON
WITH_IMGCODEC_SUNRASTER:BOOL=ON
WITH_INF_ENGINE:BOOL=OFF
WITH_IPP:BOOL=ON
WITH_ITT:BOOL=ON
WITH_JASPER:BOOL=OFF
WITH_JPEG:BOOL=ON
WITH_LAPACK:BOOL=ON
WITH_LIBREALSENSE:BOOL=OFF
WITH_MFX:BOOL=OFF
WITH_NGRAPH:BOOL=OFF
WITH_ONNX:BOOL=OFF
WITH_OPENCL:BOOL=ON
WITH_OPENCLAMDBLAS:BOOL=OFF
WITH_OPENCLAMDFFT:BOOL=OFF
WITH_OPENCL_SVM:BOOL=OFF
WITH_OPENEXR:BOOL=OFF
WITH_OPENGL:BOOL=OFF
WITH_OPENJPEG:BOOL=ON
WITH_OPENMP:BOOL=OFF
WITH_OPENNI:BOOL=OFF
WITH_OPENNI2:BOOL=OFF
WITH_OPENVX:BOOL=OFF
WITH_PLAIDML:BOOL=OFF
WITH_PNG:BOOL=ON
WITH_PROTOBUF:BOOL=ON
WITH_PTHREADS_PF:BOOL=ON
WITH_PVAPI:BOOL=OFF
WITH_QT:BOOL=OFF
WITH_QUIRC:BOOL=ON
WITH_TBB:BOOL=OFF
WITH_TIFF:BOOL=ON
WITH_UEYE:BOOL=OFF
WITH_V4L:BOOL=ON
WITH_VA:BOOL=OFF
WITH_VA_INTEL:BOOL=OFF
WITH_VTK:BOOL=OFF
WITH_VULKAN:BOOL=OFF
WITH_WEBNN:BOOL=OFF
WITH_WEBP:BOOL=ON
WITH_XIMEA:BOOL=OFF
WITH_XINE:BOOL=OFF
gflags_DIR:PATH=/usr/local/lib/cmake/gflags
glog_DIR:PATH=/usr/local/lib/x86_64-linux-gnu/cmake/glog

For my program, I’ve had to add -DCERES_FOUND to the compiler flags in order for the reconstruction functionality to be correctly included by the <opencv2/sfm.hpp> header.

-- Cache values
CMAKE_BUILD_TYPE:STRING=Debug
CMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE
CMAKE_INSTALL_PREFIX:PATH=/usr/local
OpenCV_DIR:PATH=/usr/local/lib/x86_64-linux-gnu/cmake/opencv4
CMAKE_CXX_FLAGS:STRING=-DCERES_FOUND
CMAKE_CXX_FLAGS_DEBUG:STRING=-g -DCERES_FOUND -DDEBUG -D_DEBUG
CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG -DCERES_FOUND
CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG -DCERES_FOUND
CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG -DCERES_FOUND

I don’t think it’s a good idea to add -DCERES_FOUND.

On windows I added
-DCeres_DIR=${installRepo}/ceres-solver/cmake and flag CERES_FOUND becomes true

I didn’t have to do anything for OpenCV CMake configuration to find Ceres, CERES_DIR was automatically set to the correct path.

Only in my program did I have to add the CERES_FOUNDflag or do a #define CERES_FOUND 1 before including the sfm header.
Do I need to link against Ceres in my program too?
I compiled Ceres as a static library by the way as that was the default. Could this be an issue? I still don’t understand how libopencv_sfm.so could have undefined references to other OpenCV modules.