【随手记录】CentOS 7.9 环境下编译支持 Java 8 的 OpenCV 4.9.0

1. 系统更新与基础依赖安装

CentOS 7.9 默认依赖版本较低(如 GCC 4.8.5、CMake 2.8),需先升级并安装基础工具:
# 1. 启用 EPEL 源(补充依赖包)
yum install -y epel-release

# 2. 更新系统基础包
yum update -y

# 3. 安装基础编译工具与依赖(含图像编解码库)
yum install -y git wget unzip gcc gcc-c++ make \
libjpeg-turbo-devel libpng-devel tiff-devel jasper-devel \
openexr-devel libwebp-devel gtk2-devel libv4l-devel \
ffmpeg-devel gstreamer-plugins-base-devel

# 4. 安装 CMake 3.x(CentOS 7 默认 CMake 2.8 不满足 OpenCV 要求)
yum install -y cmake3
# 软链接 cmake3 为 cmake(方便后续调用)
ln -s /usr/bin/cmake3 /usr/bin/cmake
cmake --version  # 验证:需输出 ≥3.1.0

2. 升级 GCC/G++ 到 7.x

# 1. 安装 SCL 源(提供高版本 GCC)
yum install -y centos-release-scl

# 2. 安装 GCC 7.x
yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++

# 3. 临时启用 GCC 7.x(当前终端生效)
scl enable devtoolset-7 bash
# 永久启用(可选,重启终端后生效)
echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc
source ~/.bashrc

# 验证 GCC 版本(需输出 7.x)
gcc --version

3. 安装 Java 8 环境

# 安装 OpenJDK 8 及开发包
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

# 验证 Java 环境(需输出 1.8.x)
java -version
javac -version

# 记录 JDK 安装路径(后续编译需指定)
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
echo $JAVA_HOME  # 典型路径:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-1.el7_9.x86_64

二、下载 OpenCV 源码

比较卡,可以离线下载上传

三、配置 OpenCV 编译参数


cmake \
-D CMAKE_BUILD_TYPE=Release \          # 标准发布版编译
-D CMAKE_INSTALL_PREFIX=/usr/local/opencv4 \  # 独立路径,避免冲突
-D WITH_JAVA=ON \                      # 官方标准:启用Java支持
# 修复JDK架构路径(CentOS7 x86_64)
-D JAVA_AWT_INCLUDE_PATH=${JAVA_HOME}/include \
-D JAVA_AWT_LIBRARY=${JAVA_HOME}/jre/lib/x86_64/libawt.so \
-D JAVA_JVM_LIBRARY=${JAVA_HOME}/jre/lib/x86_64/server/libjvm.so \
-D JAVA_INCLUDE_PATH=${JAVA_HOME}/include \
-D JAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux \
# 编译器:若用GCC7则保留,否则删除(用原生GCC4.8需降级OpenCV到4.2.0)
-D CMAKE_C_COMPILER=/opt/rh/devtoolset-7/root/usr/bin/gcc \
-D CMAKE_CXX_COMPILER=/opt/rh/devtoolset-7/root/usr/bin/g++ \
# 禁用无用模块/依赖(解决编译错误 + 提速)
-D WITH_IPP=OFF \                      # 跳过IPP下载
-D WITH_OPENEXR=OFF \                  # 解决EXR编译错误
-D BUILD_opencv_gapi=OFF \             # 关闭无用的GAPI模块
-D BUILD_opencv_python=OFF \           # 关闭Python绑定(无需)
-D BUILD_TESTS=OFF \                   # 关闭测试
-D BUILD_EXAMPLES=OFF \                # 关闭示例
-D BUILD_PERF_TESTS=OFF \              # 关闭性能测试
# GCC4.8兼容:启用C++11(若用GCC7可删除)
-D ENABLE_CXX11=ON \
-D CMAKE_CXX_FLAGS="-std=c++11 -fPIC" \
..
# 指向 OpenCV 源码根目录(当前在 build 目录,故用 ..)

四、编译与安装

# 1. 编译(-j 后接 CPU 核心数,加快速度,如 -j4)
make -j$(nproc)

# 2. 安装(默认安装到 /usr/local/opencv4)
make install

五、编译结果验证与环境配置

1. 查看编译产物

# 1. OpenCV Java 核心 JAR 包(供 Java 项目依赖)
ls /usr/local/share/java/opencv4/opencv-490.jar

# 2. OpenCV JNI 动态库(Java 加载库时依赖)
ls /usr/local/lib64/libopencv_java490.so

 

2. 配置环境变量(永久生效)

将 JNI 库路径加入系统动态库加载路径:
# 写入 /etc/profile,全局生效
echo "export LD_LIBRARY_PATH=/usr/local/opencv4/lib64:\$LD_LIBRARY_PATH" >> /etc/profile
source /etc/profile

六、Java 调用验证

# 测试 Java 调用(创建测试文件)
cat > TestOpenCV.java << EOF
import org.opencv.core.Core;
import org.opencv.core.Mat;
public class TestOpenCV {
    public static void main(String[] args) {
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        Mat mat = Mat.eye(3, 3, 0);
        System.out.println("OpenCV 加载成功!\\n" + mat.dump());
    }
}
EOF

  

编译测试:

javac -cp .:/usr/local/opencv4/share/java/opencv4/opencv-490.jar TestOpenCV.java

  执行:

java -Djava.library.path=./opencv-4.9.0/build/lib/ \
>      -cp .:/usr/local/share/java/opencv4/opencv-490.jar \
>      TestOpenCV
OpenCV 加载成功!
[  1,   0,   0;
   0,   1,   0;
   0,   0,   1]
posted @ 2025-12-22 10:20  空知大仙人  阅读(2)  评论(0)    收藏  举报