【问题标题】:OpenCV library error when compiling with CMake and Make: cannot find -lopencv_bgsegm使用 CMake 和 Make 编译时出现 OpenCV 库错误:找不到 -lopencv_bgsegm
【发布时间】:2020-01-06 15:35:05
【问题描述】:

我试图建立一个位于HERE 的仓库。按照说明,我创建了一个CMakeLists,并更新了里面的目录地址。我不确定 OpenCV 路径,但找到了两个候选者并插入了两者。

Cmake 很好,但是在执行make 时,我得到了这个错误,我猜这可能是由于 openCV 路径不正确。

这里是 VERBOSE 输出:

[100%] Linking CXX executable SimpleVideoSummExample
/usr/bin/cmake -E cmake_link_script CMakeFiles/SimpleVideoSummExample.dir/link.txt --verbose=1
/usr/bin/c++    -O3 -std=c++0x -std=c++0x -fopenmp  -s CMakeFiles/SimpleVideoSummExample.dir/src/utils/ShotDetector.cc.o CMakeFiles/SimpleVideoSummExample.dir/src/videoSummarization/SimpleVideoSummarizer.cc.o CMakeFiles/SimpleVideoSummExample.dir/src/utils/ColorUtils.cc.o CMakeFiles/SimpleVideoSummExample.dir/src/utils/ImageUtils.cc.o CMakeFiles/SimpleVideoSummExample.dir/examples/SimpleVideoSummExample.cc.o  -o SimpleVideoSummExample  -L/usr/local/Cellar/opencv/3.4.1_2/lib -rdynamic libsummengine.a -lopencv_imgproc -lopencv_core -lopencv_highgui -lopencv_videoio -lopencv_imgcodecs -lopencv_bgsegm -lopencv_video -lopencv_objdetect -lopencv_dnn -Wl,-rpath,/usr/local/Cellar/opencv/3.4.1_2/lib
/usr/bin/ld: cannot find -lopencv_bgsegm
collect2: error: ld returned 1 exit status
CMakeFiles/SimpleVideoSummExample.dir/build.make:199: recipe for target 'SimpleVideoSummExample' failed
make[2]: *** [SimpleVideoSummExample] Error 1

有什么问题?如何解决?

这里是CMakeLists的目录部分(地窖是git repo的用户):

include_directories(/usr/local/Cellar/opencv/3.4.1_2/include/ /usr/local/Cellar/opencv/3.4.1_2/include/opencv/ /usr/include/opencv /usr/local/include/opencv$
link_directories(/usr/local/Cellar/opencv/3.4.1_2/lib/)
add_executable(SimpleVideoSummExample src/utils/ShotDetector.cc src/videoSummarization/SimpleVideoSummarizer.cc src/utils/ColorUtils.cc src/utils/ImageUtils$
target_link_libraries(SimpleVideoSummExample
    summengine -lopencv_imgproc
    -lopencv_core
    -lopencv_highgui
    -lopencv_videoio
    -lopencv_imgcodecs
    -lopencv_bgsegm
    -lopencv_video
    -lopencv_objdetect
    -lopencv_dnn
)

【问题讨论】:

  • 尝试使用VERBOSE=1 运行make。您能否发布它的输出,以便我们可以看到提供给链接器的内容?
  • 此外,尽可能不鼓励使用link_directories。文档建议在 target_link_libraries 命令中使用每个库的完整路径。
  • @squareskittles 更新了详细输出。
  • 关于您的第二条评论,我对此一无所知。请帮忙。
  • 因此,根据您更新的问题,链接器正在/usr/local/Cellar/opencv/3.4.1_2/lib 此处查找您的 opencv 库。您能否验证它们都存在于该文件夹中(例如 libopencv_bgsegm.so)?

标签: c++ opencv makefile cmake cc


【解决方案1】:

虽然您使用的 Github 存储库没有在文档中明确说明,但您似乎不仅需要 OpenCV,还需要构建 extra OpenCV modules(由 @ 提示987654322@回答)。缺少的opencv_bgsegm 库由这些“额外的”OpenCV 模块提供。

按照this 等教程,您应该包含 CMake 定义标志:

-DOPENCV_EXTRA_MODULES_PATH=/path/to/opencv_contrib/modules/

在运行cmake 时。这将确保构建额外的模块,并且opencv_bgsegm 库将在您的系统上可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2016-10-07
    • 1970-01-01
    • 2018-02-07
    • 1970-01-01
    相关资源
    最近更新 更多