静态编译opencv for java, opencv 2.4.11 to 2.4.13.6

之前使用的opencv版本是2.4.11, 现在一般都是用java8不是java7了。在很多docker环境里,使用opencv 2.4.11的so文件,总提示一些错误。如libpng找不到,这个是因为现在都是使用libpng2 或者libpng16了。   

我本来想着重新手动编译一下2.4.11的静态文件应该比较好解决。但是编译过程中也是各种问题,如:stdlib.h: No such file or directory 。  解决了这个,又有其它的。。。    

那我们去opencv 官网看一下都有哪些版本,opencv最新的是4.0了。 为了兼容性还是要找2.4系列的,版本列表。 有个比较新的,2.4.13.6,这个 兼容性应该没什么大问题。就拿这个来做静态编译算了。 

下载 opencv 2.4.13 . 

解压

cd opencv-2.4.13.6
#创建编译目录,不能在源码目录下编译
mkdir build && cd build
# CMAKE_BUILD_TYPE=RELEASE 是否带调试信息。CMAKE_BUILD_TYPE的值可以为Release或者Debug
# CMAKE_INSTALL_PREFIX 提前设置好编译到的路径
# DBUILD_SHARED_LIBS 关闭生成动态库,即生成静态库
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -DBUILD_SHARED_LIBS=OFF ..

# 单核就不要加j参数了,GCC编译的时候默认使用一核,所以多核CPU如果想利用好才加j参数. j8不是java8的意思。。
make -j8
#如果不是root权限要加sudo 
make install 

静态编译opencv for java, opencv 2.4.11 to 2.4.13.6_第1张图片

这里一定要注意,在cmake的时候,查看上图红线标注的地方,如果没有"java"字,是不会编译得到java的静态so库文件的。一般的原因是没有安装ant,或者是JAVA_HOME没有设置。如果JAVA_HOME设置了不起作用,试试重新安装一次。

#安装apache ant 
apt update
sudo apt -y install ant
#安装软件包后,可以使用以下命令检查安装的版本:
ant -version
#这种方法,安装很方便快捷,但是安装的版本是稳定版。最新版本是需要下载源码手动安装的

# 重新安装jdk 可以试试下面的方法
# apt  install default-jdk
# apt install -y openjdk-8-jdk openjdk-8-jre
#查找java位置
which java
#找到后要用ls -l  查看一下,看是不是软链接,然后找到真的jdk目录。也可以找tool.jar来找目录
find  / -name tool.jar

#设置环境变量 Linux
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

#使用opencv过程中出现 java.lang.UnsatisfiedLinkError 一般是没有加载libopencv_java2413.so库文件的原因

 

查找过程中一些Opencv的文章

opencv入门

在mac系统 上安装 opencv +java

Introduction to Java Development

Installation in Linux¶

w3school java opencv

相关文章

在Ubuntu/Debian系统上安装Apache Ant的方法

CMake could not find JNI

not finding jni.h

编译的一些基本知识

make进行编译,再运行make install进行安装了,最后运行make clean删除临时文件
make all:产生我们设定的目标,即此范例中的可执行文件。只打make也可以,此时会开始编译原始码,然后连结,并且产生可执行文件。
make clean:清除编译产生的可执行文件及目标文件(object file,*.o)。
make distclean:除了清除可执行文件和目标文件外,把configure所产生的Makefile也清除掉。
make install:将程序安装至系统中。如果原始码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。如果用bin_PROGRAMS宏的话,程序会被安装至/usr/local/bin这个目录。
make dist:将程序和相关的档案包装成一个压缩文件以供发布。执行完在目录下会产生一个以PACKAGE-VERSION.tar.gz为名称的文件。 PACKAGE和VERSION这两个变数是根据configure.in文件中AM_INIT_AUTOMAKE(PACKAGE,VERSION)的定义。

#函数计算 fun 的使用
#使用sbox  在本地docker环境测试 -i是交互的意思   -f是指定函数名
fun install sbox -i -f javademo -e JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64

#Could NOT find JNI (missing:  JAVA_AWT_INCLUDE_PATH)   这个是因为找不到jawt.h的原因。
#Checking the documentation for FindJNI (https://cmake.org/cmake/help/latest/module/FindJNI.html)  重新安装jdk可以解决。

#camke精简  使用下面这个就可以的,其它的参数可以不用加
cmake -DBUILD_SHARED_LIBS=OFF ..

#docker  aliyunfc/runtime-java8
# fun local invoke -d 3000 java8
# fun local invoke -d 3000 --config VSCode

 

你可能感兴趣的:(java)