在Linux下使用opencv源码编译java jar包和.so共享库的常见问题

项目场景:

在Linux下使用opencv源码编译java jar包和.so共享库时,经常遇到无法编译jar包,makefile中不包含java,编译完成后找不到等问题

其他网络教程的常规编译方式:

## 创建安装目录
[root@localhost /]# mkdir -p /usr/local/opencv_make
[root@localhost opencv_make]# cd /usr/local/opencv_make
[root@localhost opencv_make]# mkdir release

##解压
[root@localhost opencv_make]# tar -zvxf opencv-4.1.0
[root@localhost opencv_make]# cd opencv-4.1.0

## 创建编译目录
[root@localhost opencv-4.1.0]# mkdir build
[root@localhost build]# cd build

## 需要手动安装3.5版本以上的cmake,参考另一篇文章;yum 下载的cmake为低版本,进行编译会报错
## 安装编译所需的软件
[root@localhost build]# yum -y install gcc gcc-c++ gtk±devel gimp-devel gimp-devel-tools gimp-help-browser zlib-devel libtiff-devel libjpeg-devel libpng-devel gstreamer-devel libavc1394-devel libraw1394-devel libdc1394-devel jasper-devel jasper-utils swig python libtool nasm build-essential ant
[root@localhost build]# cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_make/release -DBUILD_TESTS=OFF ..

## 编译
[root@localhost build]# make -j8 & make
[root@localhost build]# cd /usr/local/opencv_make/opencv-4.1.0/build/lib

原因分析:

这种常规编译本身没有什么问题,但是有如下几个注意的点
  • 这是远程服务器上或虚拟机中的环境,可以看到登陆账户是 root@localhost
  • java环境在linux上配置主要有两种,一种是openJDK使用包管理工具直接安装(例如:sudo apt-get install jdk1.8),另一种是从官网下载linux平台的JDK解压后,配置到linux中的全局变量JAVA_HOME
  • 如果是从官网下载的JDK,那么在配置JAVA_HOME时,根据网上的推荐配置有一下三种方式
sudo vim ~/.bashrc (这是各个用户目录下的配置)
sudo vim /etc/bash.bashrc (根用户的配置,我们需要把环境变量配置在这里,所有的用户都可以读取)
sudo vim /etc/profile (这是ubuntu下的配置,opencv的脚本读不到)
  • 没有配置ant

解决方案:

  • 配置ant
sudo apt-get install ant
  • 在根用户环境变量中配置JAVA_HOME
sudo vim /etc/bash.bashrc

export JAVA_HOME=/usr/local/jdk8/jdk1.8.0_291
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin

  • 切换到根用户
su
  • 执行cmake
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_make/release -DBUILD_TESTS=OFF ..
  • 如果在输出中看到java项出现在编译队列中且java编译选项中ant, JNIJava wrappers 能够被识别,那么恭喜你配置生效了
--   OpenCV modules:
--     To be built:                 calib3d core dnn features2d flann gapi highgui imgcodecs imgproc java java_bindings_generator ml objdetect photo python3 python_bindings_generator stitching ts video videoio
--     Disabled:                    world
--     Disabled by dependency:      -
--     Unavailable:                 js python2
--     Applications:                perf_tests apps
--     Documentation:               NO
--     Non-free algorithms:         NO


--   Java:                          
--     ant:                         /bin/ant (ver 1.10.7)
--     JNI:                         /usr/local/jdk8/jdk1.8.0_291/include /usr/local/jdk8/jdk1.8.0_291/include/linux /usr/local/jdk8/jdk1.8.0_291/include
--     Java wrappers:               YES
--     Java tests:                  NO
-- 
--   Install to:                    /usr/local/lib

  • 接下来执行make进行编译即可
make -j8 & make
  • 编译成功后,对应的opencv-401.jar和共享库libopencv_java401.so即可在build目录下的 bin/ 和 lib/ 下找到,将其复制到/usr/local/lib下即可在java中使用opencv-401.jar包中的方法载入

你可能感兴趣的:(opencv,linux,java,cmake)