linux 编译、交叉编译 opencv+ffmpeg 为动态库

文章目录

    • [x86 编译](#x86 编译)
      • [先编译 ffmpeg](#先编译 ffmpeg)
      • [再编译 opencv](#再编译 opencv)
      • [验证 opencv 的安装是否链接了 ffmpeg](#验证 opencv 的安装是否链接了 ffmpeg)
    • [交叉编译(目标系统 armv8 即 arrch64)](#交叉编译(目标系统 armv8 即 arrch64))
      • [准备交叉编译工具链(arm 版 gcc、g++)](#准备交叉编译工具链(arm 版 gcc、g++))
      • [先编译 ffmpeg](#先编译 ffmpeg)
      • [再编译 opencv](#再编译 opencv)
      • [验证 opencv 的安装是否链接了 ffmpeg](#验证 opencv 的安装是否链接了 ffmpeg)
    • 参考资料

opencv 的 videoio 库依赖于 ffmpeg 打开视频、相机,所以需要联合编译。

x86 编译

先编译 ffmpeg

注意替换 [path_to_install_ffmpeg] 为具体路径,稍后编译 opencv 时会用到。

sh 复制代码
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
./configure --enable-shared --prefix=[path_to_install_ffmpeg]  --disable-x86asm
make -j8
sudo make install

再编译 opencv

sh 复制代码
export PKG_CONFIG_LIBDIR=[path_to_install_ffmpeg]/lib/pkgconfig
git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=[path_to_install_opencv] ..
make -j8
sudo make install

cmake 之后,make 之前如果输出了以下内容,opencv 就链接上 ffmpeg 了。

验证 opencv 的安装是否链接了 ffmpeg

sh 复制代码
cd [path_to_install_opencv]/lib
ldd libopencv_videoio.so

返回内容中出现红框内的几个 ffmpeg 视频依赖库,即是链接成功。

交叉编译(目标系统 armv8 即 arrch64)

准备交叉编译工具链(arm 版 gcc、g++)

使用 cmake 在 x86 系统中为 arm 系统交叉编译程序:
https://blog.csdn.net/weixin_43667077/article/details/142975973

先编译 ffmpeg

注意替换 [path_to_install_ffmpeg_arm] 为具体路径,稍后编译 opencv 时会用到。

sh 复制代码
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
./configure --enable-shared --prefix=[path_to_install_ffmpeg_arm] --cross-prefix=aarch64-linux-gnu- --arch=arrch64 --target-os=linux --enable-cross-compile --enable-neon --disable-programs --disable-doc --disable-symver
make -j8
sudo make install

再编译 opencv

sh 复制代码
export PKG_CONFIG_LIBDIR=[path_to_install_ffmpeg_arm]/lib/pkgconfig
git clone https://github.com/opencv/opencv.git
cd opencv
# 操作 1. CMakeLists.txt 中添加 link_directories([path_to_install_ffmpeg_arm]/lib)
# 操作 2. modules/videoio/cmake/detect_ffmpeg.cmake 中注释 if(NOT __VALID_FFMPEG) 这一判断模块
mkdir build
cd build
cmake -DCMAKE_INSTALL_PREFIX=[path_to_install_opencv_arm] -DCMAKE_TOOLCHAIN_FILE=../platforms/linux/aarch64-gnu.toolchain.cmake ..
make -j8
sudo make install

操作 1 详情图如下

操作 2 详情图如下

cmake 之后,make 之前如果输出了以下内容,opencv 就链接上 ffmpeg 了。

验证 opencv 的安装是否链接了 ffmpeg

由于交叉编译的是 arm 系统中运行的动态库,所以以下验证操作需要先进行以下前提操作:

  • 将交叉编译好的 [ffmpeg_arm]/lib[opencv_arm]/lib 下动态库文件(*.so.*)复制到 arm 系统的某一目录 [lib_workspace]
  • 在 arm 系统中 export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:[lib_workspace]
sh 复制代码
cd [lib_workspace]/lib
ldd libopencv_videoio.so

返回内容中出现红框内的几个 ffmpeg 视频依赖库,即是链接成功。

参考资料

编译opencv+ffmpeg过程
https://blog.csdn.net/H_XKA_H/article/details/140038666

OpenCV+FFmpeg交叉编译
https://blog.csdn.net/qq_21331593/article/details/135275482

相关推荐
dessler5 小时前
Elasticsearch(ES)分片(Shard)和 副本分片(Replica Shard)
linux·运维·elasticsearch
知北游天5 小时前
Linux网络:使用TCP实现网络通信(服务端)
linux·网络·tcp/ip
Dovis(誓平步青云)6 小时前
《探秘 Linux 进程控制:驾驭系统运行的核心之力》
linux·运维·服务器
zy_destiny6 小时前
【工业场景】用YOLOv8实现行人识别
人工智能·深度学习·opencv·算法·yolo·机器学习
黄晓魚7 小时前
双目三维重建-2双目系统标定
opencv·计算机视觉·机器视觉·三维视觉
YouEmbedded7 小时前
解码Linux文件IO之系统IO
linux·服务器·文件io·系统io接口
半桔7 小时前
【网络编程】从数据链路层帧头到代理服务器:解析路由表、MTU/MSS、ARP、NAT 等网络核心技术
linux·运维·服务器·网络
程序猿小三13 小时前
Linux下基于关键词文件搜索
linux·运维·服务器
虚拟指尖14 小时前
Ubuntu编译安装COLMAP【实测编译成功】
linux·运维·ubuntu
却道天凉_好个秋14 小时前
OpenCV(七):BGR
opencv·计算机视觉