# OpenCV Contrib编译报glob错误

# 报错

/usr/bin/ld: ../../lib/libopencv_sfm.so.4.2.0: undefined reference to `google::InitVLOG3__(google::SiteFlag*, int*, char const*, int)'
collect2: error: ld returned 1 exit status
make[2]: *** [modules/sfm/CMakeFiles/opencv_test_sfm.dir/build.make:249: bin/opencv_test_sfm] Error 1
make[1]: *** [CMakeFiles/Makefile2:7455: modules/sfm/CMakeFiles/opencv_test_sfm.dir/all] Error 2
make: *** [Makefile:163: all] Error 2

# 原因

本机默认安装的GLOG版本还OpenCV_Contrib中使用的版本对不上。

# 解决办法

# 方法1

卸载掉本机默认安装的glob

sudo apt-get remove glob

重新安装glog

  • 先从github上拉glob源代码
git clone https://github.com/google/glog.git
  • 切换到旧版本分支
git checkout v0.5.0-rc2
  • 参考glog安装说明,使用cmake编译
cmake -S . -B build -G "Unix Makefiles"
cmake --build build --target install

安装完成后,重新编译OpenCV Contrib模块即可。

注意,编译glob需要的最小版本cmake3.21.0,如果版本过低的话可以从这里下载安装cmake

https://cmake.org/download/ (opens new window)

压缩包解压后,在/usr/bin下新建一个链接即可开始使用cmake了。

sudo ln -s cmake-3.28.0-rc5-linux-x86_64/bin/cmake cmake

# 方法2

使用apt安装glog

sudo apt-get install -y libgoogle-glog-dev
(adsbygoogle = window.adsbygoogle || []).push({});

# Reference

1.https://github.com/opencv/opencv_contrib/issues/2211 (opens new window)