麒麟系统编译 opencv 生成相关的共享库

jiancai.zhong 于 2024-10-11 发布

编译环境

系统内核

$ uname -a
4.19.90-52.39.v2207.ky10.aarch64 #4 SMP Wed Jun 5 15:52:50 CST 2024 aarch64 aarch64 aarch64 GNU/Linux

Java

$ java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment Bisheng (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM Bisheng (build 25.312-b07, mixed mode)

ant

$ ant -version
Apache Ant(TM) version 1.10.15 compiled on August 25 2024

Java

编译安装需要安装并配置 java 环境变量,在这里跳过安装,讲下配置环境变量,以我的 java 安装目录为:

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-10.ky10.aarch64

为例子:

/etc/bash.bashrc 中写入以下配置:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-10.ky10.aarch64
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

刷新配置

source /etc/bash.bashrc

配置文件说明

sudo vim ~/.bashrc (这是各个用户目录下的配置)
sudo vim /etc/bash.bashrc (根用户的配置,我们需要把环境变量配置在这里,所有的用户都可以读取)
sudo vim /etc/profile (这是ubuntu下的配置,opencv的脚本读不到)

提示:经过我的测试,麒麟系统在/etc/profile下配置同样生效,刷新配置记得使用 :source /etc/profile

验证

在控制台输入:

echo $JAVA_HOME

正确输出你的 java 的安装环境即可

ant

编译同时需要依赖于 ant 环境,先通过 ant -version 检查有没有安装,没有安装的情况下通过一下方式安装 ant

下载

下载地址:https://ant.apache.org/bindownload.cgi

在这里插入图片描述

以下载 apache-ant-1.10.15-bin.zip 为例,上传到 /usr/local/ant 中并解压:

unzip apache-ant-1.10.15-bin.zip

安装

解压后就安装好了,开箱即用

配置ant环境变量

/etc/profile 中加入以下代码:

export ANT_HOME=/usr/local/ant
export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH

刷新环境变量

source /etc/profile

验证

在终端输入 ant -version 能正确打印 ant 版本即表示正确安装

准备工作

上面的 javaant 配置好了以后现在开始进行编译 opencv 生成想关的共享库

下载OpenCV源码

wget -O https://github.com/opencv/opencv/archive/4.1.2.zip

将源码下载到 /usr/local/opencv 中,并通过 unzip opencv-4.1.2.zip 命令解压出来,进入到源码目录并创建 build 目录

cd opencv-4.1.2
mkdir build
cd build

cmake

build 目录下运行以下命令进行编译以产生对应的 opencv-*.jar 和共享库 libopencv_java.so

cmake \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv \
-D BUILD_TESTS=OFF \
-D BUILD_opencv_java=ON \
-D BUILD_JAVA=ON \
-D WITH_JAVA=ON \
..

参数说明

CMAKE_INSTALL_PREFIX:编译安装的目录,默认 /usr/local,本次仅编译不安装

运行以上的 cmake 命令将会出现以下输出:

--   OpenCV modules:
--     To be built:                 calib3d core dnn features2d flann highgui imgcodecs imgproc java ml objdetect photo stitching ts video videoio
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 gapi js python2 python3
--     Applications:                perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         NO

--   Java:                          
--     ant: /usr/local/ant/bin/ant (ver 1.10.15)
--     JNI: $JAVA_HOME/include $JAVA_HOME/include/linux $JAVA_HOME/include
--     Java wrappers:               YES
--     Java tests:                  NO
-- 
--   Install to: /usr/local/opencv

如果在输出中看到 java 项出现在编译队列中且 java 编译选项中ant, JNIJava wrappers 能够被识别,那么恭喜你配置生效了,就可以进行下一步编译

编译

采用多线程编译,执行以下命令:

make -j$(nproc)

验证

在编译完成后在 build 目录下的 lib 文件夹内有编译产物:libopencv_java412.so

$ find libopencv_ja*
libopencv_java412.so

可以看到正确编译并产生了 java 共享库文件 libopencv_java412.so