【随手记录】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]

浙公网安备 33010602011771号