目录
前言
本文主要讲解opencv在linux下如何生成.so文件,可以先在网上找找有没有对应版本的so文件,如果没有在生成,具体使用参照我的另一篇博客。
一、安装前置依赖
yum -y install ant
yum install -y gcc gcc-c++ make automake
yum install -y wget
二、安装CMake
wget https://cmake.org/files/v3.6/cmake-3.6.2.tar.gz
tar -zxvf cmake-3.6.2.tar.gz
cd cmake-3.6.2
./bootstrap && make -j4 && sudo make install
三、安装opencv
3.1、下载
wget https://www.witersen.com/wp-content/uploads/2022/03/opencv-4.5.5.tar.gz
unzip opencv-4.5.5.zip
3.2、创建 build文件
cd ./opencv-4.5.5 mkdir build && cd build
3.3、构建
构建前先查看下java -version 版本,确保环境变量配置正确
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D BUILD_SHARED_LIBS=OFF -D BUILD_TESTS=OFF ..
正确结果: 结果不正确,删掉build重新创建多构建几次,或者修改构建命令
3.4 、编译
# -j4为系统核数/2,不加多核编译的话,可能需要几十分钟
make -j4
make install
3.5、文件生成完成
在/usr/local/share/java/opencv4目录下会有我们所需的jar包与so库文件,
如果没有,先全局搜一下libopencv_java455.so,还没有那就删了build文件,重新构建编译。Jar包window和linux版的都一样。
四、遇到的问题
问题:docker容器集成openCV,加载失败
java.lang.UnsatisfiedLinkError: /data/libopency java455.so: libstdc++.so.6: cannot open shared object file: No such file or directory。
原因:主要是因为libopency java455.so用到了libstdc++.so.6这个包,到时docker中没有。
解决方案:进入容器内部,执行以下步骤:
1、更新 libstdc++ 包:
apk update
apk add libstdc++
2、设置 LD LIBRARY PATH 环境变量libstdc++.so.6 的环境变量
export LD LIBRARY PATH="/data/:$LD_LIBRARY_PATH"
说明:/data/是libstdc++.so.6文件所在的目录
3、重启容器