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

如何在Windows下编译OpenCV源码生成可用于Linux环境的.so动态库

报错原因说明

第一个报错

你第一次执行cmake命令时犯了两个错误:

  • cmake命令末尾需要指定OpenCV源码的根目录(即存放顶层CMakeLists.txt的文件夹),你错误指定为了空的build目录,自然找不到配置文件
  • OPENCV_EXTRA_MODULES_PATH参数是用来指定opencv_contrib额外模块的源码路径的,你设置为build目录完全不符合参数要求,不需要额外模块可以直接删除这个参数

第二个报错

你第一次执行cmake时已经在build目录生成了错误的缓存文件,没有清空缓存就更换源码路径执行cmake,工具检测到缓存和当前路径不匹配就触发了该报错,只需要删除build目录下的所有文件,重新执行配置流程即可。

Windows下编译Linux可用OpenCV Java so文件方案

你需要的是Linux平台的动态链接库,属于跨平台编译场景,优先推荐使用WSL2方式编译,比纯Windows交叉编译踩坑概率低很多,操作步骤如下:

步骤1:准备WSL2环境

  • 在Windows功能中开启适用于Linux的Windows子系统和虚拟机平台,重启后安装Ubuntu 20.04/22.04发行版
  • 打开WSL Ubuntu终端,执行以下命令安装基础依赖:
sudo apt update
sudo apt install build-essential cmake openjdk-11-jdk ant libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev

步骤2:准备源码

  • 下载OpenCV 4.5.1源码,解压到无中文、无空格、无特殊字符的路径,例如C:\dev\opencv-4.5.1
  • 若需要使用OpenCV额外功能模块,下载同版本的opencv_contrib源码,解压到同目录下,例如C:\dev\opencv_contrib-4.5.1
  • 清空原build目录所有内容,或者新建一个空的build目录用于编译

步骤3:CMake配置

在WSL终端中进入build目录,WSL下访问Windows盘的路径格式为/mnt/盘符/路径,例如上述路径对应的进入命令为:

cd /mnt/c/dev/opencv-4.5.1/build

执行以下cmake配置命令:

cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=./install \
-D BUILD_JAVA=ON \
-D BUILD_opencv_java=ON \
-D WITH_QT=ON \
-D WITH_OPENGL=ON \
-D WITH_TBB=ON \
-D ENABLE_PRECOMPILED_HEADERS=OFF \
# 无需contrib模块则删除下面这行
-D OPENCV_EXTRA_MODULES_PATH=/mnt/c/dev/opencv_contrib-4.5.1/modules \
..

注意命令末尾的..代表上层目录,即OpenCV源码根目录,不要漏写或写错。

步骤4:编译安装

配置完成后执行编译命令,-j后面跟你的CPU核心数可以加快编译速度:

make -j8
make install

编译完成后,你需要的Java调用so文件在build/install/lib目录下,文件名为libopencv_java451.so,连同同目录下的其他依赖so文件一起拷贝到目标Linux环境,就可以通过System.load加载调用。

注意事项
  • 所有涉及的路径不要出现中文、空格、特殊字符,避免cmake识别出错
  • 每次重新执行cmake配置前,一定要清空build目录下的所有文件,避免旧缓存导致配置报错
  • 编译用的JDK版本要和你Linux运行环境的JDK版本匹配,避免JNI调用异常
  • 若目标Linux环境为ARM架构,需要在WSL中安装对应的ARM交叉编译工具链,调整cmake参数后再编译

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 19:39:02