在Amazon EC2 AMI上无yum/rpm交叉依赖安装带libav编解码器的OpenCV
没问题,我给你一套完全不依赖yum/rpm包管理器的纯净OpenCV安装方案,完美适配你的Amazon EC2 AMI环境——不仅能装带编解码器的新版OpenCV,还能保证pkg-config可以正常识别它。
纯净安装新版OpenCV(带编解码器+pkg-config支持)分步方案
1. 先搭建独立的安装环境(避免污染系统)
我们先创建一个自定义目录,把所有编译的软件都装在这里,既不会干扰系统原有文件,也方便后续管理:
# 创建目录结构 mkdir -p ~/local/{bin,lib,include,share/pkgconfig} # 把自定义目录加入环境变量,让系统能找到我们安装的工具和库 export PATH=~/local/bin:$PATH export LD_LIBRARY_PATH=~/local/lib:$LD_LIBRARY_PATH export PKG_CONFIG_PATH=~/local/share/pkgconfig:$PKG_CONFIG_PATH # 把环境变量写入bash配置,下次登录自动生效 echo 'export PATH=~/local/bin:$PATH' >> ~/.bashrc echo 'export LD_LIBRARY_PATH=~/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc echo 'export PKG_CONFIG_PATH=~/local/share/pkgconfig:$PKG_CONFIG_PATH' >> ~/.bashrc
2. 编译安装所有依赖组件(全源码,无yum/rpm依赖)
OpenCV需要的编解码器和构建工具,我们全部从源码编译:
2.1 编译安装cmake(OpenCV的构建工具)
如果你的系统没有cmake,先编译安装最新稳定版:
wget https://cmake.org/files/v3.27/cmake-3.27.6.tar.gz tar -zxf cmake-3.27.6.tar.gz cd cmake-3.27.6 ./bootstrap --prefix=~/local make -j$(nproc) # 用所有CPU核心加速编译 make install cd .. && rm -rf cmake-3.27.6*
2.2 编译安装基础编解码器依赖
依次安装zlib、libjpeg、libpng这些基础图像编解码器:
# 安装zlib wget https://zlib.net/zlib-1.3.tar.gz tar -zxf zlib-1.3.tar.gz cd zlib-1.3 ./configure --prefix=~/local make -j$(nproc) make install cd .. && rm -rf zlib-1.3* # 安装libjpeg-turbo wget https://sourceforge.net/projects/libjpeg-turbo/files/3.0.0/libjpeg-turbo-3.0.0.tar.gz/download -O libjpeg-turbo-3.0.0.tar.gz tar -zxf libjpeg-turbo-3.0.0.tar.gz cd libjpeg-turbo-3.0.0 cmake -DCMAKE_INSTALL_PREFIX=~/local . make -j$(nproc) make install cd .. && rm -rf libjpeg-turbo-3.0.0* # 安装libpng wget https://download.sourceforge.net/libpng/libpng-1.6.40.tar.gz tar -zxf libpng-1.6.40.tar.gz cd libpng-1.6.40 ./configure --prefix=~/local --with-zlib=~/local make -j$(nproc) make install cd .. && rm -rf libpng-1.6.40*
2.3 编译安装ffmpeg(核心视频编解码器)
ffmpeg是OpenCV支持视频解码的关键,编译时开启共享库支持:
wget https://ffmpeg.org/releases/ffmpeg-6.0.tar.gz tar -zxf ffmpeg-6.0.tar.gz cd ffmpeg-6.0 ./configure --prefix=~/local --enable-shared --enable-pic --disable-static --enable-gpl --enable-libx264 --enable-libx265 make -j$(nproc) make install cd .. && rm -rf ffmpeg-6.0*
3. 编译安装新版OpenCV(带pkg-config支持)
现在编译最新稳定版OpenCV,同时确保pkg-config能识别它:
# 下载OpenCV和扩展模块(可选,包含更多功能) wget https://github.com/opencv/opencv/archive/4.8.0.tar.gz -O opencv-4.8.0.tar.gz wget https://github.com/opencv/opencv_contrib/archive/4.8.0.tar.gz -O opencv_contrib-4.8.0.tar.gz tar -zxf opencv-4.8.0.tar.gz tar -zxf opencv_contrib-4.8.0.tar.gz mkdir -p opencv-4.8.0/build && cd opencv-4.8.0/build
用cmake配置编译参数,重点开启pkg-config支持和编解码器:
cmake \ -DCMAKE_INSTALL_PREFIX=~/local \ -DCMAKE_BUILD_TYPE=Release \ -DBUILD_SHARED_LIBS=ON \ -DOPENCV_ENABLE_NONFREE=ON \ -DOPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-4.8.0/modules \ -DWITH_FFMPEG=ON \ -DWITH_JPEG=ON \ -DWITH_PNG=ON \ -DPKG_CONFIG_EXECUTABLE=~/local/bin/pkg-config \ -DPKG_CONFIG_PATH=~/local/share/pkgconfig \ ..
关键参数说明:
BUILD_SHARED_LIBS=ON:生成共享库,符合你的应用需求WITH_FFMPEG/JPEG/PNG=ON:启用对应编解码器支持PKG_CONFIG_*:指定我们自定义的pkg-config路径,保证OpenCV能生成正确的配置文件
最后编译安装:
make -j$(nproc) make install
4. 验证安装效果
4.1 检查pkg-config可见性
执行以下命令,如果能输出正确的头文件路径和库链接参数,说明pkg-config识别成功:
pkg-config --cflags opencv4 pkg-config --libs opencv4
4.2 测试OpenCV功能
写个简单的测试代码test_opencv.cpp:
#include <opencv2/opencv.hpp> #include <iostream> int main() { cv::Mat img = cv::Mat::zeros(100, 100, CV_8UC3); std::cout << "OpenCV version: " << CV_VERSION << std::endl; std::cout << "Test image created successfully!" << std::endl; return 0; }
编译并运行:
g++ test_opencv.cpp -o test_opencv $(pkg-config --cflags --libs opencv4) ./test_opencv
如果输出OpenCV版本和测试成功的信息,说明安装完全正常。
注意事项
- 所有软件都安装在
~/local目录,完全独立于系统,符合“纯净安装”要求 - 如果你的EC2 AMI连gcc、make这些基础编译工具都没有,需要先从源码编译gcc(耗时较长,建议优先确认系统是否自带)
- 可以根据需求调整OpenCV编译参数,比如关闭不需要的模块或添加其他编解码器支持
内容的提问来源于stack exchange,提问作者JBWanscher
相关产品推荐
相关产品推荐

