debian9/ubuntu18/deepin 编译安装opencv for java和eclipse环境配置

写在前
现在是2020.12,此时debian10已经出了。但是在debian10上编译出来的java库并不能够识别。原因没有找到。然后又在debian9、ubuntu18和deepin上进行测试,都能够正确编译。中间有很多坑。尤其是我用debian10编译的时候,坑了我一天半,最后换系统皆大欢喜。在此分享给大家心酸历程。

opencvForJava

1. 编译过程

  1. 从OpenCV官网下载源码,这里以4.12为例
  2. 解压源码包。目录结构为:
opencv-4.1.2/
├── 3rdparty
├── apps
├── cmake
├── CMakeLists.txt
├── CONTRIBUTING.md
├── data
├── doc
├── include
├── LICENSE
├── modules
├── platforms
├── README.md
└── samples

进入opencv-4.1.2

#进入文件夹
cd opencv-4.1.2
#创建build文件夹
mkdir build
#进入build文件夹
cd build
  1. 安装环境
[compiler] sudo apt-get install build-essential
[required] sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
[optional] sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev

$ 注意 $ : libjasper-dev 无法找到。如果你是Ubuntu,就需要添加一个源,如果你是debian,可能就需要自己编译了。
当然我用不上这个插件,就直接把这个包去掉了。不安装libjasper-dev

  1. 开始cmake生产makefile文件
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local BUILD_SHARED_LIBS=OFF ..
#这个有很多选项。我用默认的就可以编译出java

注意,坑来了!

如果这里cmake成功之后,在你的输出日志最后几行有这个:

--   Java:                          
--     ant:                         /usr/bin/ant (ver 1.10.5)
--     JNI:                         /opt/jdk1.8/include /opt/jdk1.8/include/linux /opt/jdk1.8/include
--     Java wrappers:               YES
--     Java tests:                  YES

恭喜你,不用折腾了。直接make就可以。
否则,分成以下几种情况:

坑1. ant:为no

说明你没有安装ant或者对于找不到ant的安装位置。

#1. 安装ant
sudo apt install ant

#2. 如果安装成功,重新运行cmake,ant还是没有被识别,那么你需要手动添加ant的位置
# 直接终端运行
export ANT_HOME=/usr/share/ant/ #当然你把这句话写到/etc/profile最后一行也行。记得要source /etc/profile一下
#回到build 目录,重新cmake以下
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local BUILD_SHARED_LIBS=OFF ..

补充:如果你的ant不在/usr/share/ant,你需要自己定位安装文件夹。

#查看ant位置
whereis ant
#得到的位置是一个软连接,所以要看链接到哪里
ls -an _whereis得到的第一个_
安装目录有bin、etc、lib三个文件夹
检查软链接的目录是不是安装目录。不是继续ls -an查它。

坑2. JNI为no

  • 可能原因你没安装java。安装它
  • 已经安装java,但是没有设置JAVA_HOME
export JAVA_HOME=xxxxxxxx #你javahome的地址。

如果有多个java,需要设置默认的java环境。搜索如何设置。我另一篇帖子有。
4.12 在oracle jdk1.8 和open jdk11都编译通过。open jdk1.8没有尝试。

如果你 ANT和JNI都没问题。剩下两个 应该也是yes了。

  1. make -j8 我的是4核8线程,所以是8比较快。当然写1234567都可以。
  2. 等待编译成功。如果你只是用java,不需要执行make install
    如果你要在c++里面用,需要执行sudo make install

2. 环境配置

以eclipse为例,idea我尝试,不敢乱说。
Linux下还是简单的。只需要两步:

  1. Window -> Preference, 选择Java -> Build Path -> User Libraries选项卡
  2. 右侧点击new,输入opencv4.12,
    选中opencv4.12,点击add external jars, 选择刚才build/bin/opencv412.jar
  3. 点开opencv412.jar, Native library location 设置为build下的lib文件夹。
    保存即可

如果没有说明你的编译有问题,查看cmake的记录。是否有java选项

3. 环境测试

详见官网eclipse配置
新建工程。在build path中加入刚才的opencv4.12库

import org.opencv.core.Core;
import org.opencv.core.CvType;
import org.opencv.core.Mat;
public class Hello
{
   public static void main( String[] args )
   {
      System.loadLibrary( Core.NATIVE_LIBRARY_NAME );
      Mat mat = Mat.eye( 3, 3, CvType.CV_8UC1 );
      System.out.println( "mat = " + mat.dump() );
   }
}

写在最后:在debian10里面loadLibrary总出问题,最终也没找到原因。所以换到了其他的。其实兜兜转转,自己纵向成为特别一点的人,这么多年一直有些抵触ubuntu。但是,不得不说ubuntu是挺省心的。从debian10换到debian9,又因为声卡问题换到了ubuntu。有时候过度的折腾反而是浪费时间。已经过了折腾的年纪,系统于我就是生产力工具。如果这次直接上ubuntu,可能一下午就完事了。一切顺风顺水。
如果只是把linux当做生产力工具,尽量不要选择最新的系统。

你可能感兴趣的:(视觉,Linux调教记录)