编译不依赖动态库的FFMPEG(麒麟国防 V10)

一、为了让ffmpeg 包含 H.264 需要先编译并安装 x264(ARM64 原生)

bash 复制代码
cd /usr/local/src
git clone https://code.videolan.org/videolan/x264.git
cd x264

./configure \
    --enable-static \
    --disable-shared \
    --enable-pic

make -j$(nproc)
make install

二、确认 x264 是否安装成功

bash 复制代码
[root@localhost ~]# ls /usr/local/lib | grep x264
libx264.a

[root@localhost ~]# ls /usr/local/include | grep x264
x264_config.h
x264.h

如果这两个( libx264.a,x264.h )都存在,说明 x264 安装成功。

如果仍然没有 libx264.a 那可能是你的系统把库装到了其他位置,查询一下

bash 复制代码
find / -name "libx264.a" 

三、编译 FFmpeg(静态 + x264)

bash 复制代码
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg


./configure \
    --prefix=/opt/local/ffmpeg \
    --enable-gpl \
    --enable-libx264 \
    --enable-static \
    --disable-shared \
    --disable-debug \
    --disable-doc \
    --pkg-config-flags="--static" \
    --extra-cflags="-I/usr/local/include" \
    --extra-ldflags="-L/usr/local/lib" \
    --extra-ldexeflags="-static"
bash 复制代码
make -j 4
make install

四、最终产物(可离线分发)

bash 复制代码
/opt/local/ffmpeg/bin/ffmpeg
/opt/local/ffmpeg/bin/ffprobe

验证是否包含 H.264

bash 复制代码
[root@localhost bin]# ffmpeg -codecs | grep 264
ffmpeg version 4.2.5 Copyright (c) 2000-2021 the FFmpeg developers
  built with gcc 7.3.0 (GCC)
  configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --docdir=/usr/share/doc/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=aarch64 --optflags='-O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -fexceptions -fstack-protector-strong -grecord-gcc-switches -specs=/usr/lib/rpm/kylin/kylin-hardened-cc1 -fasynchronous-unwind-tables -fstack-clash-protection' --extra-ldflags='-Wl,-z,relro -Wl,-z,now -specs=/usr/lib/rpm/kylin/kylin-hardened-ld ' --extra-cflags=' ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-fontconfig --enable-frei0r --enable-gcrypt --enable-gnutls --enable-ladspa --enable-libaom --enable-libdav1d --enable-libass --enable-libbluray --enable-libcdio --enable-libdrm --enable-libjack --enable-libfreetype --enable-libfribidi --enable-libgsm --enable-libmp3lame --enable-openal --enable-opencl --enable-opengl --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-librsvg --enable-libsrt --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libvidstab --enable-libvpx --enable-libx264 --enable-libx265 --enable-libxvid --enable-libzimg --enable-libzvbi --enable-avfilter --enable-avresample --enable-libmodplug --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64
  libavutil      56. 31.100 / 56. 31.100
  libavcodec     58. 54.100 / 58. 54.100
  libavformat    58. 29.100 / 58. 29.100
  libavdevice    58.  8.100 / 58.  8.100
  libavfilter     7. 57.100 /  7. 57.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  5.100 /  5.  5.100
  libswresample   3.  5.100 /  3.  5.100
  libpostproc    55.  5.100 / 55.  5.100
 DEV.LS h264                 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (decoders: h264 h264_v4l2m2m ) (encoders: libx264 libx264rgb h264_v4l2m2m h264_vaapi )
[root@localhost bin]# 

验证是否是静态编译

bash 复制代码
如果是完全静态编译,ldd 会输出:


[root@localhost bin]# ldd ffmpeg
        不是动态可执行文件
[root@localhost bin]# ldd ffprobe 
        不是动态可执行文件


如果不是静态,会看到类似:


linux-vdso.so.1 =>  (0x0000fffff7ffd000)
libpthread.so.0 => /lib64/libpthread.so.0
libm.so.6 => /lib64/libm.so.6
libc.so.6 => /lib64/libc.so.6
相关推荐
飞凌嵌入式4 小时前
1块集成了4核Cortex-A7高性能CPU、1颗RISC-V MCU、多种高速总线、还兼容树莓派的T153低成本开发板
linux·arm开发·嵌入式硬件·risc-v
熊猫钓鱼>_>5 小时前
从零到一:打造“抗造” Electron 录屏神器的故事
前端·javascript·ffmpeg·electron·node·录屏·record
若风的雨5 小时前
【 ARMv8多核处理器启动方案设计】
linux·arm开发
切糕师学AI6 小时前
ARM 汇编指令系列文章导读
汇编·arm开发
UpYoung!7 小时前
【格式转换工具】专业级多媒体格式转换解决方案——Freemake Video Converter 完全指南:轻量化视频剪辑媒体格式转换
ffmpeg·短视频·实用工具·开源工具·多媒体格式转换·运维必备·视频转换格式
切糕师学AI7 小时前
ARM 汇编语言语法小解
arm开发
若风的雨8 小时前
ATF + ARMv8 多核启动流程图
linux·arm开发
若风的雨9 小时前
安全方案原理与作用详解
linux·arm开发
CQ_YM17 小时前
ARM时钟与定时器
arm开发·单片机·嵌入式硬件·arm