ffmpeg是音视频处理的底层所需的强大的sdk库,rk3588芯片结合ffmpeg可实现视频的硬件编码,解码,滤镜处理等强大功能,特别是对4k视频的处理。下面分享我实际操作步骤,因Linux环境各不相同,步骤有些差异。
1. 编译工具
:gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu
#1. 编译zlib zlib-1.2.11.tar.gz
./configure --prefix=/home/uw/cross/zlib
make
make install
2. 编译libpng libpng-1.6.43.tar.gz
#先执行下面命令
export LDFLAGS="-L/home/uw/cross/zlib/lib"
export CFLAGS="-I/home/uw/cross/zlib/include"
export CPPFLAGS="-I/home/uw/cross/zlib/include"
./configure --prefix=/home/uw/cross/libpng \
--host=aarch64-linux-gnu
make -j4
make install
#需要配置环境变量
export ARCH=aarch64
export PATH=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-
export CC=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
export CXX=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
export LD=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld
export AR=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar
export AS=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-as
export RANLIB=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ranlib
export STRIP=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
export INCLUDE=/home/uw/cross/zlib/include
export LIBRARY_PATH=/home/uw/cross/zlib/lib
export LDFLAGS="-L/home/uw/cross/zlib/lib"
export CFLAGS="-I/home/uw/cross/zlib/include"
export CPPFLAGS="-I/home/uw/cross/zlib/include"
3. 编译 freetype freetype-2.13.2.tar.gz
#要去掉 harfbuzz
./configure --prefix=/home/uw/cross/freetype \
--host=aarch64-linux-gnu \
--with-png=yes \
--with-zlib=yes \
--with-harfbuzz=no
make -j4
make install
4. 编译xvidcore xvidcore-1.3.3.tar.gz
# XviD是个开源的视频编解码器
./configure --prefix=/home/uw/cross/xvid \
--host=aarch64-linux-gnu
make -j4
make install
5. 编译xmllibxml2-sources-2.9.10.tar.gz
#2.7.8 不支持aarch64
#配置环境变量
export ARCH=aarch64
export PATH=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-
export CC=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
export CXX=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
export LD=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld
export AR=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar
export AS=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-as
export RANLIB=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ranlib
export STRIP=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
#export PYTHONPATH=/usr/local/lib/python2.7/
#export PYTHONHOME=/usr/lib/python2.7
#先执行下面就可以
export INCLUDE=/home/uw/cross/zlib/include:/home/uw/cross/libpng/include
export LIBRARY_PATH=/home/uw/cross/zlib/lib:/home/uw/cross/libpng/lib
export LDFLAGS="-L/home/uw/cross/zlib/lib -L/home/uw/cross/libpng/lib"
export CFLAGS="-I/home/uw/cross/zlib/include -I/home/uw/cross/libpng/include"
export CPPFLAGS="-I/home/uw/cross/zlib/include -I/home/uw/cross/libpng/include"
./configure --prefix=/home/uw/cross/xml \
--with-python=/usr/lib/python3.8 \
--host=aarch64-linux-gnu \
--with-zlib=/home/uw/cross/zlib
make -j4
make install
#编译失败:需要加上with-python
#parserInternals.c:36:18: fatal error: zlib.h: No such file or directory #include <zlib.h>
#执行如下语句后ok,前提是先编译好了zlib
export LDFLAGS="-L/home/uw/cross/zlib/lib"
export CFLAGS="-I/home/uw/cross/zlib/include"
export CPPFLAGS="-I/home/uw/cross/zlib/include"
6. 编译x264 x264-master.tar.gz
./configure --prefix=/home/uw/cross/x264 \
--host=aarch64-linux-gnu \
--cross-prefix=aarch64-linux-gnu- \
--enable-shared \
--disable-asm
make -j4
make install
7. 编译x265 x265-Release_3.5.zip
cd x265
mkdir build_aarch64
cd build_aarch64
cmake \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_PROCESSOR=aarch64 \
-DCMAKE_C_COMPILER=$CC \
-DCMAKE_CXX_COMPILER=$CXX \
-DCMAKE_AR=$AR \
-DCMAKE_ASM_COMPILER=$AS \
-DCMAKE_INSTALL_PREFIX=/home/uw/cross/x265 \
-DBUILD_SHARED_LIBS=ON \
../source
make -j4
#以上方法会报错
#正确编译
#解压x265-Release_3.5.zip
cd x265-Release_3.5
cd /build/aarch64-linux
vim crosscompile.cmake
#修改下面
set(CROSS_COMPILE_ARM 1)
set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR aarch64)
#修改make-Makefiles.bash 文件权限
chmod 777 make-Makefiles.bash
#执行
./make-Makefiles.bash
#ccmake: command not found
#sudo apt-get install cmake-qt-gui
#需要安装cmke ccmake
sudo apt install cmake-curses-gui
#弹出窗口修改
CMAKE_INSTALL_PREFIX = /home/uw/cross/x265
NASM_EXECUTABLE = /usr/bin/yasm
LIBDL = /opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/lib/libdl.so
#按g 生成并退出
make -j4
make install
#成功编译2.5
# specify the cross compiler
set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc)
set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g++)
# specify the target environment
SET(CMAKE_FIND_ROOT_PATH /opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu)
./build/linux/make-Makefiles.bash \
--host=aarch64-linux-gnu \
--prefix=/home/uw/cross/x265
8. 编译openssl openssl-1.1.1-latest.tar.gz
export PATH=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/:$PATH
export CC=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
export CXX=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
export LD=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld
export AR=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar
export AS=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-as
export RANLIB=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ranlib
export STRIP=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
#修改 config 文件, 在437行处添加
GUESSOS=aach64-gnu-linux2
./config no-asm -shared --prefix=/home/uw/cross/ssl
# --cross-compile-prefix=aarch64-linux-gnu- 不需要这个
# 环境变量里 也不要设置CROSS_COMPILE ,否则编译提示找不到文件
make -j4
make install
9. 编译fontconfig fontconfig-2.14.0.tar.gz
#环境变量
#export ARCH=aarch64
export PATH=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/:$PATH
#export CROSS_COMPILE=aarch64-linux-gnu-
export CC=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
export CXX=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
export LD=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld
export AR=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar
export AS=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-as
export RANLIB=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ranlib
export STRIP=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
#export PYTHONPATH=/usr/local/lib/python2.7/
#export PYTHONHOME=/usr/lib/python2.7
export PKG_CONFIG_PATH=/home/uw/cross/xml/lib/pkgconfig:/home/uw/cross/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
export INCLUDE=/home/uw/cross/zlib/include:/home/uw/cross/libpng/include:/home/uw/cross/xml/include/libxml2:/home/uw/cross/xml/include:/home/uw/cross/freetype/include/freetype2
export LIBRARY_PATH=/home/uw/cross/zlib/lib:/home/uw/cross/libpng/lib:/home/uw/cross/xml/lib:/home/uw/cross/freetype/lib
export LDFLAGS="-L/home/uw/cross/zlib/lib -L/home/uw/cross/libpng/lib -L/home/uw/cross/xml/lib -L/home/uw/cross/freetype/lib"
export CFLAGS="-I/home/uw/cross/zlib/include -I/home/uw/cross/libpng/include -I/home/uw/cross/xml/include -I/home/uw/cross/xml/include/libxml2 -I/home/uw/cross/freetype/include/freetype2"
export CPPFLAGS="-I/home/uw/cross/zlib/include -I/home/uw/cross/libpng/include -I/home/uw/cross/xml/include -I/home/uw/cross/xml/include/libxml2 -I/home/uw/cross/freetype/include/freetype2"
./configure --prefix=/home/uw/cross/fontconfig \
--host=aarch64-linux-gnu \
--enable-libxml2 \
--disable-docs \
--with-xmldir=/home/uw/cross/xml
#gperf: command not found
#总提示找不到xml ,拷贝libxml2.pc 到 /usr/lib/pkgconfig 目录下, freetype 也是
make -j4
make install
#--disable-docs
10. 编译fribidi-1.0.13.tar.xz
#fribidi是个中东字体增强库,它实现了Unicode字符集的双向算法,以便处理阿拉伯语、希伯来语这些中东语言。
./configure --prefix=/home/uw/cross/fribidi \
--host=aarch64-linux-gnu
make -j4
make install
#注意,这里要下载xz, 我下载gz格式编译错误
#configure 错误,提示需要glib2.0
#出现了如下错误:
11. 编译glib glib-2.56.1.tar.xz
#checking for growing stack pointer... configure: error: cannot run test program while cross compiling
#原来configure不能为交叉编译检查glib_cv_stack_grows,glib_cv_stack_grows表示堆栈的增长方向。configure无法在目标机上运行测试程序,自然无法检查,只好手工指定。顺便看一下还哪些相关的变量不能检查的,一起写到cache文件中,并重新配置:
#export ARCH=aarch64
config.sh
export PATH=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-
export CC=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
export CXX=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
export LD=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld
export AR=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar
export AS=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-as
export RANLIB=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ranlib
export STRIP=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
export PKG_CONFIG_PATH=/home/uw/cross/icu/lib/pkgconfig:/home/uw/cross/zlib/lib/pkgconfig:/home/uw/cross/ffi/lib/pkgconfig:/home/uw/cross/fribidi/lib/pkgconfig:/home/uw/cross/fontconfig/lib/pkgconfig:/home/uw/cross/xml/lib/pkgconfig:/home/uw/cross/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
# 下面直接执行
echo ac_cv_type_long_long=yes>aarch64-linux-gnu.cache
echo glib_cv_stack_grows=no>>aarch64-linux-gnu.cache
echo glib_cv_uscore=no>>aarch64-linux-gnu.cache
echo ac_cv_func_posix_getpwuid_r=yes>>aarch64-linux-gnu.cache
./configure --prefix=/home/uw/cross/glib \
--host=aarch64-linux-gnu \
--disable-libmount \
--disable-libelf \
--with-pcre=internal \
--cache-file=aarch64-linux-gnu.cache
#,You must have either have gettext support in your C library, or use the GNU gettext library
# sudo apt-get install -y gettext 就不再提示上面错误
make -j4
#编译错误 gclosure.c:28:10: fatal error: ffi.h: No such file or directory
#先编译ffi
#编译libffi libffi-3.4.6.tar.gz
./configure --prefix=/home/uw/cross/ffi \
--host=aarch64-linux-gnu
make -j4
make install
#重新配置glib
make -j4
make install
12. 编译harfbuzz harfbuzz-2.5.0.tar.xz harfbuzz-1.8.1.tar.bz2
#harfbuzz是一个文本塑形引擎,它能够将Unicode字符转换为格式正确的字形输出,可用于调试和预览字体效果。
tar xfjv harfbuzz-1.8.1.tar.bz2
./configure --prefix=/home/uw/cross/harfbuzz \
--host=aarch64-linux-gnu \
--disable-gtk-doc \
--with-cairo=no
#freetype 需要2.0以上 编译arfbuzz-2.1.0 harfbuzz-1.8.1 成功
# 不要cairo 成功编译
make -j4
make install
# 编译1.27 不成功
export PKG_CONFIG_PATH=/home/uw/cross/libpng/lib/pkgconfig:/home/uw/cross/glib/lib/pkgconfig:/home/uw/cross/icu/lib/pkgconfig:/home/uw/cross/zlib/lib/pkgconfig:/home/uw/cross/ffi/lib/pkgconfig:/home/uw/cross/fribidi/lib/pkgconfig:/home/uw/cross/fontconfig/lib/pkgconfig:/home/uw/cross/xml/lib/pkgconfig:/home/uw/cross/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
#各种依赖库太多,不好解决,总是提示找不到png库
#解决办法就是 把依赖库及头文件 拷贝到编译环境 ,比如下面考libpng库及头文件
cp /home/uw/cross/libpng/lib/* /opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/lib -rd
cp /home/uw/cross/libpng/include/* /opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc/usr/include -rd
make -j4
# cannot find -lcairo,需要编译 lcairo
13. 编译iconv libiconv-1.16.tar.gz 字符编码之间的转换
#在Linux系统中,不同的应用程序可能使用不同的字符编码方式,而iconv正是为了解决这种编码不匹配问题而被广泛使用
./configure \
--prefix=/home/uw/cross/iconv \
--host=aarch64-linux-gnu
14. 编译ICU icu4c-70_1-src.tgz
tar xfzv icu4c-70_1-src.tgz
cd icu
#在源码同级目录建立 buildA
mkdir buildA
cd ./buildA
../source/runConfigureICU Linux/gcc
#一定要先make 编译一个x86 de icu, 先生成config/icucross.mk 文件,没有该文件无法完成 交叉编译配置
make j4
#在源码同级目录建立 buildB
cd ../
mkdir buildB
cd buildB
./source/configure \
--disable-samples \
--disable-tests \
--with-cross-build=/home/uw/tools/icu/build \
--prefix=/home/uw/cross/icu \
--host=aarch64-linux-gnu
make j4
make install
15. 编译libass 添加字幕 libass-0.17.1.tar.gz
#libass 是一个跨平台的高级字幕渲染引擎,专注于处理ASS和SSA格式的字幕文件
#libass是一个适用于ASS和SSA格式(Advanced Substation Alpha/Substation Alpha)的字幕渲染器,
#支持的字幕类型包括srt、ass等,
#凡是涉及到给视频画面添加字幕,均需事先集成libass
# 需要先编译freetype字库
#
#export ARCH=aarch64
export PATH=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/:$PATH
export CROSS_COMPILE=aarch64-linux-gnu-
export CC=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gcc
export CXX=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-g++
export LD=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ld
export AR=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ar
export AS=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-as
export RANLIB=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-ranlib
export STRIP=/opt/gcc-linaro-10.2.1-2021.01-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-strip
#export PYTHONPATH=/usr/local/lib/python2.7/
#export PYTHONHOME=/usr/lib/python2.
#export TARGET=aarch64-linux-gnu
export PKG_CONFIG_PATH=/home/uw/cross/harfbuzz/lib/pkgconfig:/home/uw/cross/libpng/lib/pkgconfig:/home/uw/cross/glib/lib/pkgconfig:/home/uw/cross/zlib/lib/pkgconfig:/home/uw/cross/ffi/lib/pkgconfig:/home/uw/cross/fribidi/lib/pkgconfig:/home/uw/cross/fontconfig/lib/pkgconfig:/home/uw/cross/xml/lib/pkgconfig:/home/uw/cross/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
export INCLUDE=/home/uw/cross/zlib/include:/home/uw/cross/libpng/include:/home/uw/cross/xml/include:/home/uw/cross/freetype/include
export LIBRARY_PATH=/home/uw/cross/zlib/lib:/home/uw/cross/libpng/lib:/home/uw/cross/xml/lib:/home/uw/cross/freetype/lib:$LIBRARY_PATH
export LDFLAGS="-L/home/uw/cross/zlib/lib -L/home/uw/cross/libpng/lib -L/home/uw/cross/xml/lib -L/home/uw/cross/freetype/lib -lfreetype"
export CFLAGS="-I/home/uw/cross/zlib/include -I/home/uw/cross/libpng/include -I/home/uw/cross/xml/include -I/home/uw/cross/freetype/include"
export CPPFLAGS="-I/home/uw/cross/zlib/include -I/home/uw/cross/libpng/include -I/home/uw/cross/xml/include -I/home/uw/cross/freetype/include"
./configure --prefix=/home/uw/cross/libass \
--host=aarch64-linux-gnu
make -j4
make install
#'freetype2' requires 'harfbuzz >= 2.0.0' but version of harfbuzz is 1.8.1
#16 编译lib fdk-aac-2.0.3.tar.gz
# 一次编译成功
# LT_INIT: command not found ,autoconf not found
#需要装autoconf automake
sudo apt-get install autoconf automake libtool
sudo ln -s /usr/bin/libtoolize /usr/bin/libtoo
#安装好后 需要重新运行
./autogen.sh
./configure \
--prefix=/home/uw/cross/fdk-aac \
--host=aarch64-linux-gnu
make -j4
make install
17. 编译openjpeg openjpeg-2.3.0.tar.gz 成功编译
# 安装交叉编译工具链(以交叉编译为arm架构为例)
#下载OpenJPEG源代码 openjpeg-2.3.0.tar.gz
#git clone https://github.com/uclouvain/openjpeg.git
cd openjpeg-2.3.0
# 创建构建目录
mkdir build && cd build
# 配置CMake(使用交叉编译工具链)
cmake .. \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_C_COMPILER=aarch64-linux-gnu-gcc \
-DCMAKE_CXX_COMPILER=aarch64-linux-gnu-g++ \
-DCMAKE_INSTALL_PREFIX=/home/uw/cross/openjpeg \
-DCMAKE_INSTALL_LIBDIR=lib \
-DBUILD_SHARED_LIBS=ON \
-DWITH_TURBOJPEG=OFF \
-DBUILD_STATIC_LIBS=ON
# 编译OpenJPEG
make -j4
make install
18. 编译rtmp rtmpdump.tar.gz
#下载:git clone git://git.ffmpeg.org/rtmpdump
#修改两个Makefile 注意配置openssl和zlib路径
cd rtmpdump
vim Makefile
#在前面加上
CROSS_COMPILE=aarch64-linux-gnu-
XCFLAGS +=-I /home/uw/cross/zlib/include
XCFLAGS += -I /home/uw/cross/zlib/include
XLDFLAGS += -L /home/uw/cross/zlib/lib
XLDFLAGS += -L /home/uw/cross/ssl/lib
#修改
prefix=/home/uw/cross/rtmp
#修改librtmp 目录下的Makefile 方法同上
#需要openssl ,将编译好的openssl 库和头文件拷贝到编译器libc/usr/ 目录下
make -j4
make install
#成功编译
19. 编译libmp3lame 支持mp3编码 lame-3.100.tar.gz
./configure \
--prefix=/home/uw/cross/lame \
--host=aarch64-linux-gnu
make -j4
make install
#编译成功,但是没有pkg-config ,编译ffmpg 直接加库
20. 编译 pixman pixman-pixman-0.42.0.tar.gz
#Pixman是由三星工程师开发的像素操作库,广泛应用于矢量图形Cario和X服务器等。
#它能够提供低级像素处理能力,同时具备图像合成、图形变化以及光栅化等功能
./autogen.sh
./configure \
--prefix=/home/uw/cross/pixman \
--host=aarch64-linux-gnu
make -j4
make install
#编译成功
21. 编译cairo cairo-1.14.8.tar.xz 1.17编译有错误
#Cairo是一个跨平台的2D图形库,支持多种输出设备如X-Windows、Win32和PDF
./configure --prefix=/home/uw/cross/cairo \
--host=aarch64-linux-gnu \
--enable-win32=no \
--enable-win32-font=no \
--enable-pdf=no \
--enable-ps=no \
--enable-xlib=no \
--enable-xlib-xrender=no \
--enable-xcb=no \
--enable-xlib-xcb=no \
--enable-xcb-shm=no \
--enable-ft=yes \
make j4
make install
#ok
22. 编译libv4l2 v4l-utils-1.18.1.tar.bz2
tar xvjf v4l-utils-1.18.1.tar.bz2
./configure \
--prefix=/home/uw/cross/v4l2 \
--host=aarch64-linux-gnu
# 要先编译libX11 libX11-1.6.9.tar.bz2
tar xvjf libX11-1.6.9.tar.bz2
./configure \
--prefix=/home/uw/cross/libX11 \
--host=aarch64-linux-gnu
#configure: error: cannot run test program while cross compiling
23. 编译--enable-libflite 语音合成
#b
./configure \
--prefix=/home/uw/cross/openssh \
--host=aarch64-linux-gnu
#23 编译libssh
mkdir build && cd build
cmake ..\
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_INSTALL_PREFIX=/home/uw/cross/ssh \
-DCMAKE_C_COMPILER=$CC \
-DCMAKE_CXX_COMPILER=$CXX \
-DCMAKE_INSTALL_LIBDIR=lib \
-DBUILD_SHARED_LIBS=ON \
-DBUILD_STATIC_LIBS=ON \
-DZLIB_LIBRARY:FILEPATH="/home/uw/cross/zlib/lib/libz.so" \
-DZLIB_INCLUDE_DIR:PATH="/home/uw/cross/zlib/include"
#编译libssh-0.11.1.tar.xz
#CMake 3.12.0 or higher is required. You are running version 3.10.2
#改为libssh-0.10.3
#Could NOT find ZLIB (missing: ZLIB_LIBRARY) (found version "1.3.1")
#加上下面这个
-DZLIB_LIBRARY:FILEPATH="/home/uw/cross/zlib/lib/libz.so"
-DZLIB_INCLUDE_DIR:PATH="/home/uw/cross/zlib/include"
#新问题
24. 编译libdrm libdrm-2.4.100.tar.gz
#使用Meson和Ninja交叉编译libdrm
#sudo apt-get update
#sudo apt-get install meson ninja-build
#tar xvjf drm-libdrm-2.4.122.tar.bz2
#meson setup --prefix=/home/uw/cross/drm
#2.4.100 直接用configure
tar xfzv libdrm-2.4.100.tar.gz
cd libdrm-2.4.100
./configure \
--prefix=/home/uw/cross/libdrm \
--host=aarch64-linux-gnu \
--disable-intel \
#ok
25. 编译rk-mpp
#--with-kernel-source=/home/uw/RK3588/rk3588_linux_release_v1.2.1/kernel
# rk-mpp 编译很简单,没有什么依赖库
cd ./mpp-1.0.7/build/linux/aarch64
#核实一下编译器
vim arm.linux.cross.cmake
./make-Makefiles.bash
make -j4
make install
#注意:make install 将安装在usr/目录下 ,将相关lib库文件和include 文件拷贝到指定目录
26. 编译ffmpeg
#先要执行下面环境变量,不然会提示找不到相关库,尽快库已经拷贝到编译器目录,但是配置程序还是用pkg-config 去检查是否有该库
export PKG_CONFIG_PATH=/home/uw/cross/pkgconfig-all:/home/uw/cross/mpp/lib/pkgconfig:/home/uw/cross/rtmp/lib/pkgconfig:/home/uw/cross/openjpeg/lib/pkgconfig:/home/uw/cross/libdrm/lib/pkgconfig:/home/uw/cross/libass/lib/pkgconfig:/home/uw/cross/harfbuzz/lib/pkgconfig:/home/uw/cross/libpng/lib/pkgconfig:/home/uw/cross/glib/lib/pkgconfig:/home/uw/cross/zlib/lib/pkgconfig:/home/uw/cross/ffi/lib/pkgconfig:/home/uw/cross/fribidi/lib/pkgconfig:/home/uw/cross/fontconfig/lib/pkgconfig:/home/uw/cross/xml/lib/pkgconfig:/home/uw/cross/freetype/lib/pkgconfig:$PKG_CONFIG_PATH
./configure \
--prefix=/home/uw/cross/ffmpeg \
--cross-prefix=aarch64-linux-gnu- \
--arch=aarch64 \
--target-os=linux \
--enable-shared \
--disable-static \
--enable-gpl \
--enable-nonfree \
--enable-pthreads \
--enable-version3 \
--enable-runtime-cpudetect \
--enable-libx264 \
--enable-encoder=libx264 \
--enable-encoder=mjpeg \
--enable-libx265 \
--enable-openssl \
--enable-libfdk-aac \
--enable-libxml2 \
--enable-librtmp \
--enable-libfreetype \
--enable-libfontconfig \
--enable-libharfbuzz \
--enable-libxvid \
--enable-libfribidi \
--enable-libass \
--enable-libopenjpeg \
--enable-libmp3lame \
--enable-libdrm \
--enable-rkmpp \
--enable-decoder=h264_rkdec \
--enable-encoder=h264_rkvenc \
--pkg-config=/usr/bin/pkg-config
make -j4
make install
#直接成功:
#到此为止,ffmpeg6.1.2 for rk3588 编译大功告成!
27. 下面是之前没有拷贝库的配置错误处理
#RROR: libass >= 0.11.0 not found using pkg-config
#需要加上 --pkg-config=/usr/bin/pkg-config
#提示找不到x265 的库, 发现x265库编译的有问题,重新正确编译后可以
#用 file 命令查看 库文件 编译器架构
#加上--enable-libxml2
#ERROR: libxml-2.0 not found using pkg-config ,明明有这个库,?
# pkg-config --list-all | grep libxml 确实查不到 ?
# 将libxml-2.0.pc 复制到/usr/lib/pkgconfig 下就可以查到了
cp /home/uw/cross/xml/lib/pkgconfig/libxml-2.0.pc /usr/lib/pkgconfig
#设置环境变量PKG_CONFIG_PATH
#发现PKG_CONFIG_PATH 只有最后三个,不知道什么原因,改为统一把.pc 考到一个目录下
export PKG_CONFIG_PATH=/home/uw/cross/all-config/pkgconfig
#configure 还是提示找不到xml ,查看日志,ffbuild/config.log 发现测试代码编译确实有问题,主要是找不到头文件 和库文件
#解决办法,修改 vim libxml-2.0.pc 该问题查了很久,还是要看日志文件 查找错误
#源文件
prefix=/home/uw/cross/xml
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
modules=1
Name: libXML
Version: 2.9.10
Description: libXML library version2.
Requires:
Libs: -L${libdir} -lxml2
Libs.private: -L/home/uw/cross/zlib/lib -lz -lm
Cflags: -I${includedir}/libxml2
#修改后
prefix=/home/uw/cross/xml
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
modules=1
Name: libXML
Version: 2.9.10
Description: libXML library version2.
Requires:
Libs: -L${libdir} -lxml2 -L/home/uw/cross/zlib/lib -lz
Libs.private: -L/home/uw/cross/zlib/lib -lz -lm
Cflags: -I${includedir}/libxml2 -I${includedir}
#
#成功配置
./configure \
--prefix=/home/uw/cross/ffmpeg \
--cross-prefix=aarch64-linux-gnu- \
--arch=aarch64 \
--target-os=linux \
--enable-shared \
--disable-static \
--enable-gpl \
--enable-nonfree \
--enable-pthreads \
--enable-version3 \
--enable-runtime-cpudetect \
--enable-libx264 \
--enable-libx265 \
--enable-openssl \
--enable-libfdk-aac \
--enable-libxml2 \
--pkg-config=/usr/bin/pkg-config
#配置rtmp 模块也是aarch64-linux-gnu/bin/ld: cannot find -lz
#继续修改librtmp.pc
Libs: -L${libdir} -lrtmp -L/home/uw/cross/zlib/lib -lz
#接下来加上freetype 等,应该类似的问题, 修改.pc
Libs: -L/home/uw/cross/freetype/lib -lfreetype -L/home/uw/cross/libpng/lib -lpng -L/home/uw/cross/zlib/lib -lz
#配置rtmp 模块 --enable-libfontconfig
#修改 .pc
Libs: -L${libdir} -lfontconfig -L/home/uw/cross/xml/lib -lxml2
#配置xvid ,由于xvid 编译时候没有pkgconfig, 所以直接加上
--extra-cflags="-I/home/uw/cross/xvid/include" \
--extra-ldflags="-L/home/uw/cross/xvid/lib" \
#配置 --enable-libfribidi ,直接就可以了 ,复制.pc 到指定目录下
#配置--enable-libass 这一步加了 好多依赖库
--extra-cflags="-I/home/uw/cross/freetype/include -I/home/uw/cross/harfbuzz/include/harfbuzz -I/home/uw/cross/glib/include/glib-2.0 -I/home/uw/cross/glib/include/glib-2.0/include -I/home/uw/cross/xvid/include -I/home/uw/cross/libpng/include -I/home/uw/cross/xml/include/libxml2 -I/home/uw/cross/zlib/include" \
--extra-ldflags="-L/home/uw/cross/freetype/lib -lfreetype -L/home/uw/cross/harfbuzz/lib -lharfbuzz -L/home/uw/cross/glib/lib -lglib-2.0 -L/home/uw/cross/xvid/lib -L/home/uw/cross/libpng/lib -lpng -L/home/uw/cross/xml/lib -lxml2 -L/home/uw/cross/zlib/lib -lz" \
#配置--enable-libopenjpeg
#配置mpp
ERROR: rkmpp requires --enable-libdrm
#用meson ninja 交叉编译 libdrm
#1
sudo apt-get install meson ninja-build
#2
mkdir build
cd build
#3配置交叉编译环境变量,例如设置目标操作系统、架构和交叉编译工具链:
export CC=your_cross_compiler_prefix-gcc
export CXX=your_cross_compiler_prefix-g++
export AR=your_cross_compiler_prefix-ar
export RANLIB=your_cross_compiler_prefix-ranlib
#4使用Meson配置项目,指定交叉编译参数:
meson setup --cross-file cross-compilation.txt --prefix /home/uw/corss/libdrm --buildtype release builddir
#cross-compilation.txt 文件内容如下
[binaries]
c = 'aarch64-linux-gnu-gcc'
cpp = 'aarch64-linux-gnu-g++'
ar = 'aarch64-linux-gnu-ar'
strip = 'aarch64-linux-gnu-strip'
[host_machine]
system = 'linux'
cpu_family = 'aarch64'
cpu = 'aarch64'
endian = 'little'
#5编译项目:
ninja -C builddir
#6安装编译好的库:
ninja -C builddir install
#libdrm-2.4.80.tar.bz2
./configure \
--prefix=/home/uw/cross/libdrm \
--host=aarch64-linux-gnu
1414

被折叠的 条评论
为什么被折叠?



