Linux下使用Conan构建OpenCV程序失败问题求助
问题背景
使用Conan 2.12.2在Ubuntu 20.04.6 LTS上构建依赖OpenCV 4.10.0的项目,已在conanfile.txt中开启ffmpeg、gstreamer等选项,Conan Host/Build配置为gcc9、gnu14。执行conan install后运行CMake报错:
CMake Error at build/cmakedeps_macros.cmake:66 (message):
Library 'opencv_video' not found in package. If 'opencv_video' is a system
library, declare it with 'cpp_info.system_libs' property
CMakeLists.txt中指定查找并链接OpenCV的core、imgproc、highgui、video组件。
解决方案
1. 确认OpenCV包是否包含video组件
先检查Conan中心的opencv/4.10.0包是否提供video组件:
conan inspect opencv/4.10.0 -r conancenter | grep -A 20 "components"
如果输出中没有video或opencv_video相关条目,说明需要调整Conan选项强制启用该模块。
2. 修正conanfile.txt的OpenCV编译选项
在conanfile.txt中添加明确启用video模块的选项,确保编译时包含该组件:
[requires] opencv/4.10.0 [options] opencv/4.10.0:ffmpeg=True opencv/4.10.0:gstreamer=True opencv/4.10.0:video=True opencv/4.10.0:opencv_video=True opencv/4.10.0:build_videoio=True # 部分版本需开启此选项以支持video相关功能
然后重新编译安装OpenCV(强制覆盖旧缓存):
conan remove opencv/4.10.0 -f rm -rf build/ conan install . --profile:host=your_host_profile --profile:build=your_build_profile --build=opencv
3. 修正CMakeLists.txt的链接写法
使用现代CMake的目标链接方式,避免依赖旧的${OpenCV_LIBS}变量:
cmake_minimum_required(VERSION 3.16) project(your_project_name) find_package(OpenCV REQUIRED COMPONENTS core imgproc highgui video) add_executable(your_app main.cpp) target_link_libraries(your_app PRIVATE OpenCV::core OpenCV::imgproc OpenCV::highgui OpenCV::video )
4. 检查Conan Profile配置
确保Host和Build Profile的编译器配置正确,示例profile文件(如~/.conan2/profiles/gcc9)内容:
[settings] os=Linux compiler=gcc compiler.version=9 compiler.cppstd=gnu14 compiler.libcxx=libstdc++11
安装时指定profile:
conan install . --profile:host=gcc9 --profile:build=gcc9 --build=opencv
5. 验证本地缓存的OpenCV包
进入Conan缓存的opencv包目录(路径类似~/.conan2/p/opencv/xxxxxxxx/presets),查看生成的CMake配置文件,确认存在OpenCVVideoTargets.cmake或类似文件,确保组件信息已正确生成。
内容的提问来源于stack exchange,提问作者Karim Dhrif

