模块opencv_sfm已禁用,因为未找到以下依赖项:Glog/Gflags-检测到两者

模块opencv_sfm已禁用,因为未找到以下依赖项:Glog/Gflags-检测到两者,opencv,cmake,glog,opencv-contrib,gflags,Opencv,Cmake,Glog,Opencv Contrib,Gflags,我无法使用cmake为opencv编译sfm模块 下面的日志显示cmake同时找到glog和GFLAG,但编译失败 Glog: YES freetype2: NO harfbuzz: NO Julia not found. Not compiling Julia Bindings. Module opencv_ovis disabled because OGRE3D was not found No preference for use of exported gflags CM

我无法使用cmake为opencv编译sfm模块

下面的日志显示cmake同时找到glog和GFLAG,但编译失败

Glog:   YES
freetype2:   NO
harfbuzz:    NO
Julia not found. Not compiling Julia Bindings. 
Module opencv_ovis disabled because OGRE3D was not found
No preference for use of exported gflags CMake configuration set, and no hints for include/library directories provided. Defaulting to preferring an installed/exported gflags CMake configuration if available.
Found installed version of gflags: D:/ceres/gflags/out/build/x64-Debug
Detected gflags version: 2.2.2
WARNING: Target "cmTC_9b54b" requests linking to directory "D:/ceres/glog/out/build/x64-Debug".  Targets may link only to libraries.  CMake is dropping the item.
WARNING: Target "cmTC_9b54b" requests linking to directory "D:/ceres/glog/out/build/x64-Debug".  Targets may link only to libraries.  CMake is dropping the item.
WARNING: Target "cmTC_9b54b" requests linking to directory "D:/ceres/glog/out/build/x64-Debug".  Targets may link only to libraries.  CMake is dropping the item.
WARNING: Target "cmTC_9b54b" requests linking to directory "D:/ceres/glog/out/build/x64-Debug".  Targets may link only to libraries.  CMake is dropping the item.
Checking SFM deps... FALSE
Module opencv_sfm disabled because the following dependencies are not found: Glog/Gflags

Tesseract:   NO
Allocator metrics storage type: 'long long'
Registering hook 'INIT_MODULE_SOURCES_opencv_dnn': D:/opencv-4.5.0/modules/dnn/cmake/hooks/INIT_MODULE_SOURCES_opencv_dnn.cmake
opencv_dnn: filter out cuda4dnn source code
CMake Warning at D:/opencv-4.5.0/cmake/OpenCVModule.cmake:679 (message):
  Unexpected include: D:/opencv-4.5.0/build/downloads/xfeatures2d
  (module=opencv_xfeatures2d)
Call Stack (most recent call first):
  D:/opencv-4.5.0/cmake/OpenCVModule.cmake:710 (ocv_target_include_modules)
  D:/opencv_contrib/modules/xfeatures2d/CMakeLists.txt:17 (ocv_module_include_directories)
以下是“opencv\u contrib\modules\sfm\CmakeLists.txt”中的代码片段,该代码片段导致前面的输出:

if((gflags_FOUND OR GFLAGS_FOUND OR GFLAGS_INCLUDE_DIRS) AND (glog_FOUND OR GLOG_FOUND OR GLOG_INCLUDE_DIRS))
  set(_fname "${CMAKE_CURRENT_BINARY_DIR}/test_sfm_deps.cpp")
  file(WRITE "${_fname}" "#include <glog/logging.h>\n#include <gflags/gflags.h>\n int main() { (void)(0); return 0; }\n")

  // This is reason of the fail
  try_compile(SFM_DEPS_OK "${CMAKE_BINARY_DIR}" "${_fname}"
      CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${GLOG_INCLUDE_DIRS};${GFLAGS_INCLUDE_DIRS}"
      LINK_LIBRARIES ${GLOG_LIBRARIES} ${GFLAGS_LIBRARIES}
      OUTPUT_VARIABLE OUTPUT
  )
  file(REMOVE "${_fname}")
  message(STATUS "Checking SFM deps... ${SFM_DEPS_OK}")
else()
  set(SFM_DEPS_OK FALSE)
endif()

if(NOT HAVE_EIGEN OR NOT SFM_DEPS_OK)
  set(DISABLE_MSG "Module opencv_sfm disabled because the following dependencies are not found:")
  if(NOT HAVE_EIGEN)
    set(DISABLE_MSG "${DISABLE_MSG} Eigen")
  endif()
  if(NOT SFM_DEPS_OK)
    set(DISABLE_MSG "${DISABLE_MSG} Glog/Gflags")
  endif()
  message(STATUS ${DISABLE_MSG})
  ocv_module_disable(sfm)
endif()
if((gflags\u发现或gflags\u发现或gflags\u包含目录)和(glog\u发现或glog\u发现或glog\u包含目录))
set(_fname“${CMAKE\u CURRENT\u BINARY\u DIR}/test\u sfm\u deps.cpp”)
文件(写入“${fname}”“#include\n#include\n int main(){(void)(0);返回0;}\n”)
//这就是失败的原因
尝试编译(SFM_DEPS_OK“${CMAKE_BINARY_DIR}”“${fname}”
CMAKE_FLAGS“-DINCLUDE_目录:STRING=${GLOG_INCLUDE_DIRS};${GFLAGS_INCLUDE_DIRS}”
链接库${GLOG\u库}${GFLAGS\u库}
输出变量输出
)
文件(删除“${fname}”)
消息(状态“正在检查SFM deps…${SFM_deps_OK}”)
else()
设置(SFM\U DEPS\U OK FALSE)
endif()
如果(没有特征或没有SFM\U DEPS\U OK)
设置(由于未找到以下依赖项,禁用模块opencv\U sfm:)
如果(没有特征值)
设置(禁用消息“${DISABLE\u MSG}Eigen”)
endif()
如果(不是SFM\u部门\u正常)
设置(禁用消息“${DISABLE\u MSG}Glog/Gflags”)
endif()
消息(状态${DISABLE\u MSG})
ocv_模块_禁用(sfm)
endif()
我认为cmake中的gflags和glog路径存在问题。我尝试了更多的变体。它们中的大多数都是基于

配置:

  • OpenCV 4.5.0
  • OpenCV contrib 4.5.0
  • glog 0.4.0
  • gflags 2.2.2
  • Ceres Solver 2.0.0
  • 特征值3.3.9
  • CMake 3.9.12
  • 视窗10
类似问题:

  • -仅针对Ubuntu解决
  • -删除生成文件夹没有帮助
  • -在这里,他建议下载所有部件的旧版本

我在cmake中设置的glog参数不正确

以下是正确的设置:

  • glog_DIR:构建在哪里。应该有glog-config.cmake。路径:glog/out/build/x64调试
  • GLOG_库的安装位置。glogd.lib的路径。路径:glog/out/install/x64 Debug/lib/glogd.lib
  • GLOG\u INCLUDE\u DIR:安装位置。应该有一个名为glog的文件夹。路径:glog/out/install/x64 Debug/include