项目场景:
在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的脚本读不到)
解决方案:
sudo apt-get install ant
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 -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local/opencv_make/release -DBUILD_TESTS=OFF ..
- 如果在输出中看到java项出现在编译队列中且java编译选项中ant, JNI和Java 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 -j8 & make
- 编译成功后,对应的opencv-401.jar和共享库libopencv_java401.so即可在build目录下的 bin/ 和 lib/ 下找到,将其复制到/usr/local/lib下即可在java中使用opencv-401.jar包中的方法载入
|