编译不依赖动态库的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
相关推荐
梁洪飞1 天前
内核的schedule和SMP多核处理器启动协议
linux·arm开发·嵌入式硬件·arm
代码游侠1 天前
学习笔记——Linux字符设备驱动
linux·运维·arm开发·嵌入式硬件·学习·架构
阿里巴啦1 天前
python+yt-dlp开源项目,支持 YouTube, Bilibili, TikTok/抖音,快手 等多个平台的视频/音频/字幕下载/ai摘要等功能
python·ffmpeg·whisper·音视频·视频处理·ai摘要·音视频转录
syseptember2 天前
Linux网络基础
linux·网络·arm开发
代码游侠2 天前
学习笔记——Linux字符设备驱动开发
linux·arm开发·驱动开发·单片机·嵌入式硬件·学习·算法
程序猿阿伟2 天前
《Apple Silicon与Windows on ARM:引擎原生构建与模拟层底层运作深度解析》
arm开发·windows
wkm9562 天前
在arm64 ubuntu系统安装Qt后编译时找不到Qt3DExtras头文件
开发语言·arm开发·qt
unicrom_深圳市由你创科技2 天前
基于ARM+DSP+FPGA异构计算架构的高速ADC采集卡定制方案
arm开发·fpga开发
松涛和鸣2 天前
DAY69 Practical Guide to Linux Character Device Drivers
linux·服务器·arm开发·数据库·单片机·嵌入式硬件
来鸟 鸣间2 天前
linux下ffmpeg源码编译
linux·运维·ffmpeg