You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV Android交叉编译中CMAKE_MODULE_PATH配置无效找不到OpenCVConfig.cmake

Android Qt 项目集成 OpenCV 时 CMake 无法识别 OpenCVConfig.cmake

问题场景

在统一使用 NDK r21e 工具链、配置 ANDROID_PLATFORM=28、ANDROID_ABI=arm64-v8a 的前提下,在面向 Android 的 Qt 项目中集成自行编译的 OpenCV 动态库 SDK,无论调整什么路径配置,CMake 都报错找不到 OpenCVConfig.cmake。

已尝试的所有配置:

  • 在项目 CMakeLists.txt 中往 CMAKE_MODULE_PATH、CMAKE_PREFIX_PATH 追加 OpenCV 的 jni 目录路径:
    list (APPEND CMAKE_MODULE_PATH
            "$ENV{HOME}/CLionProjects/opencv/opencv-android-shared/sdk/native/jni")
    list (APPEND CMAKE_PREFIX_PATH
            "...原有路径项"
            "$ENV{HOME}/CLionProjects/opencv/opencv-android-shared/sdk/native/jni")
    
  • 命令行传入编译参数覆盖路径配置:
    -DCMAKE_TOOLCHAIN_FILE="/home/dym/Android/Sdk/ndk/android-ndk-r21e/build/cmake/android.toolchain.cmake"
    -DANDROID_ABI=arm64-v8a
    -DCMAKE_MODULE_PATH=/home/dym/CLionProjects/opencv/opencv-android-shared/sdk/native/jni
    
  • 已配置的 OpenCV 路径参考截图:
    OCV_DIR

对应的 CMake 报错信息:

CMake Error at CMakeLists.txt: 31 (find_package):
  By not providing "FindOpenCV.cmake" in CMAKE_MODULE_PATH this project has
  asked CMake to find a package configuration file provided by "OpenCV", but
  CMake did not find one.

  Could not find a package configuration file provided by "OpenCV" with any
  of the following names:

    OpenCVConfig.cmake
    opencv-config.cmake

  Add the installation prefix of "OpenCV" to CMAKE_PREFIX_PATH or set
  "OpenCV_DIR" to a directory containing one of the above files. If "OpenCV"
  provides a separate development package or SDK, be sure it has been
  installed.

直接有效的解决步骤

  • 核对 OpenCVConfig.cmake 的实际存放位置
    Android 版 OpenCV 编译产出的 OpenCVConfig.cmake 不会放在 sdk/native/jni 根目录,而是会按 ABI 分类存放到 sdk/native/jni/abi-<对应ABI名称> 的子目录下。之前配置的搜索路径比实际文件位置高了一层,CMake 不会递归搜索子目录查找配置文件,自然匹配不到目标文件。
  • 纠正路径配置的认知误区
    CMAKE_MODULE_PATH 的作用是搜索 Find<PackageName>.cmake 形式的模块脚本,OpenCVConfig.cmake 属于包配置文件,对应的搜索逻辑根本不会读取 CMAKE_MODULE_PATH 下的路径,之前往这个变量里追加的 OpenCV 路径完全起不到作用。
  • 采用最直接的配置方式
    不需要绕 CMAKE_PREFIX_PATH 的搜索逻辑,在 find_package(OpenCV) 调用前强制指定 OpenCV_DIR 指向实际存放 OpenCVConfig.cmake 的目录即可:
    set(OpenCV_DIR "$ENV{HOME}/CLionProjects/opencv/opencv-android-shared/sdk/native/jni/abi-arm64-v8a" CACHE PATH "OpenCV config path" FORCE)
    find_package(OpenCV REQUIRED)
    
  • 清理旧的 CMake 缓存
    之前多次失败的配置会被存到项目的 CMakeCache.txt 里,新的路径配置如果和缓存里的旧值不匹配,会优先读取缓存值,导致修改不生效。删掉项目根目录下的 CMakeCache.txt 文件和 CMakeFiles 文件夹后,重新执行CMake配置流程。
  • 额外校验点
    确认编译 OpenCV 时设置的 ABI 参数确实生成了 abi-arm64-v8a 子目录下的配置文件,没有因为编译参数漏配,导致对应 ABI 的 OpenCVConfig.cmake 没有生成。

内容的提问来源于stack exchange,提问作者Spaghetti Man

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.28 13:27:00