编译不依赖动态库的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
相关推荐
weixin_4243810012 小时前
IAR EW for Arm - IAR命令行
arm开发
勿忘初心122115 小时前
【Windows流媒体实战1】FFmpeg+Nginx-RTMP Windows详细搭建教程
ffmpeg·nginx-rtmp·windows流媒体搭建·rtmp直播
咯哦哦哦哦16 小时前
【deban13】系统 安装arm qt6.8.2
arm开发
磨十三1 天前
U-Boot
arm开发·嵌入式硬件
Discipline~Hai3 天前
ARM03-蜂鸣器和中断
c语言·arm开发·单片机·嵌入式硬件·嵌入式
byte轻骑兵4 天前
BlueZ源码编译环境配置全指南:Linux桌面原生编译 + 嵌入式ARM交叉编译 + 定制裁剪与调试实战
linux·arm开发·蓝牙·bluez·电脑蓝牙
Yeauty4 天前
你那条 ffmpeg 命令,一键翻成 Rust builder 代码
开发语言·rust·ffmpeg
武汉万象奥科4 天前
AGV导航控制器方案 | 基于HD-RK3576系列核心板的算控融合一体化平台
arm开发·嵌入式硬件·arm核心板·单板机
zlinear数据采集卡4 天前
从“脏信号”到“纳伏级纯净”:硬核拆解DABL7606的多级抗混叠滤波与24位过采样算法
arm开发·科技·嵌入式硬件·fpga开发·开源
透明的玻璃杯5 天前
Arm屏幕
arm开发