香橙派--安装RKMPP、x264、x265、libdrm、FFmpeg(支持rkmpp)以及opencv(支持带rkmpp的ffmpeg)(适用于RK3588平台)

一、opencv的子库

0. 安装RKMPP

git clone https://github.com/rockchip-linux/mpp
cd mpp/build/linux/aarch64
./make-Makefiles.bash
make -j$(nproc)
sudo make install

RKMPP:用于编解码测试,支持RK3588平台。

1. 安装x264

git clone https://code.videolan.org/videolan/x264.git
cd x264
./configure --prefix=/usr/local/x264 --disable-opencl --enable-static --enable-shared
make -j$(nproc)
sudo make install

配置环境变量:

echo 'export PKG_CONFIG_PATH="/usr/local/x264/lib/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/usr/local/x264/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc

创建x264配置文件:

sudo nano /etc/ld.so.conf.d/x264.conf
# 添加以下内容
/usr/local/x264/lib

2. 安装x265

git clone https://bitbucket.org/multicoreware/x265_git.git
cd x265_git
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/x265 -DENABLE_SHARED=ON source
make -j$(nproc)
sudo make install

配置环境变量:

echo 'export PKG_CONFIG_PATH="/usr/local/x265/lib/pkgconfig:$PKG_CONFIG_PATH"' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH="/usr/local/x265/lib:$LD_LIBRARY_PATH"' >> ~/.bashrc
source ~/.bashrc

创建x265配置文件:

sudo vim /etc/ld.so.conf.d/x265.conf
# 添加以下内容
/usr/local/x265/lib

3. 安装libdrm

wget https://dri.freedesktop.org/libdrm/libdrm-2.4.89.tar.bz2
tar -jxvf libdrm-2.4.89.tar.bz2
cd libdrm-2.4.89
sed -i 's/drm_private uint32_t nouveau_debug;/drm_private extern uint32_t nouveau_debug;/' nouveau/private.h
./configure --prefix=/usr/local/libdrm --host=aarch64-linux-gnu
make -j$(nproc)
sudo make install

4. 安装FFmpeg

4.1 不同版本安装

4.1.1官方版本(没有h263_rkmpp、mpeg1_rkmpp、mpeg2_rkmpp、mpeg4_rkmpp、hevc_rkmpp)
git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
./configure --prefix=/usr/local/ffmpeg --enable-version3 --enable-libdrm --enable-rkmpp --enable-libx264 --enable-nonfree --enable-gpl --enable-shared
make -j$(nproc)
sudo make install
4.1.2 特殊版本(h263_rkmpp、h264_rkmpp、mpeg1_rkmpp、mpeg2_rkmpp、mpeg4_rkmpp、hevc_rkmpp、vp8_rkmpp、vp9_rkmpp)
git clone --depth=1 https://github.com/nyanmisaka/ffmpeg-rockchip.git ffmpeg
cd ffmpeg-rockchip
./configure --prefix=/usr/local/ffmpeg --enable-gpl --enable-nonfree --enable-pthreads --extra-libs=-lpthread \
  --disable-asm --disable-x86asm --disable-inline-asm \
  --enable-decoder=aac --enable-decoder=aac_fixed --enable-decoder=aac_latm --enable-encoder=aac \
 
<think>好的,用户现在的问题是,他们有一个原本用于普通编译的FFmpeg配置命令,现在想要使用Android NDK r18b进行交叉编译。我需要帮他们调整这个命令,使其适用于交叉编译环境。 首先,我需要回顾用户提供的原始配置命令: ``` ./configure \ --enable-rkmpp \ --enable-libdrm \ --extra-cflags="-I$MPP_ROOT/include" \ --extra-ldflags="-L$MPP_ROOT/lib" \ --enable-shared \ --disable-static \ --disable-doc ``` 用户的目标是使用Android NDK r18b进行交叉编译,所以需要将普通编译命令转换为针对Android的交叉编译命令。 接下来,我需要考虑交叉编译FFmpeg到Android时需要的参数。通常需要设置目标系统(target-os)、架构(arch)、工具链路径(cross-prefix)、sysroot等。同时,用户已经启用了rkmpplibdrm,这可能涉及到Rockchip的硬件加速,所以需要确保这些依赖库已经用NDK正确编译,并且头文件和库路径正确。 用户之前的问题是关于交叉编译mpp和FFmpeg的,所以可能已经编译好了mpp库,现在需要链接到FFmpeg。因此,需要确保MPP_ROOT指向的是交叉编译后的mpp库的路径,并且这些库是针对Android架构编译的,比如aarch64。 然后,我需要检查NDK r18b的特性。这个版本的NDK已经支持使用clang作为默认编译器,并且提供了CMake工具链文件,但在这里用户是直接使用configure脚本,所以可能需要手动设置交叉编译工具链。 需要设置的参数可能包括: - --target-os=android:指定目标操作系统为Android。 - --arch=aarch64:指定架构为ARM64。 - --enable-cross-compile:启用交叉编译。 - --cross-prefix:指定交叉编译工具的前缀,比如aarch64-linux-android-- --sysroot:指定系统根目录,通常指向NDK中的sysroot。 - 可能需要指定cc和cxx为clang编译器,因为NDK r18b默认使用clang。 同时,需要处理额外的CFLAGS和LDFLAGS,确保包含正确的头文件和库路径。用户原来的extra-cflags和extra-ldflags指向MPP_ROOT,需要确认这些路径是否适用于交叉编译后的mpp库。 还需要注意NDK的路径是否正确,用户可能需要替换NDK_ROOT变量为实际路径。另外,API级别需要指定,比如android-21,对应到编译参数中的ANDROID_PLATFORM或者--sysroot中的路径。 可能的错误点包括: 1. 未正确设置交叉编译工具链,导致使用主机系统的编译器而不是NDK的。 2. MPP库未正确交叉编译,导致FFmpeg链接时出现架构不匹配。 3. 头文件或库路径未正确指向交叉编译后的版本,导致找不到依赖项。 4. 未启用必要的交叉编译选项,导致配置失败。 需要逐步调整configure参数,添加必要的交叉编译选项,并确保所有依赖库都已正确准备。此外,用户可能需要禁用某些不需要的模块,或者启用特定于Android的选项,比如使用neon优化等。 最后,整合这些参数到configure命令中,并提供一个示例脚本,方便用户直接使用。同时,提醒用户注意环境变量的设置,比如NDK_ROOT和MPP_ROOT的正确路径,以及检查生成的库文件是否符合目标架构。</think>--- ### **针对 Android NDK r18b 的交叉编译配置调整** 为了将原有的普通编译命令适配到 **Android NDK r18b** 交叉编译环境,需添加以下关键参数: ```bash # 设置环境变量(替换为实际路径) export NDK_ROOT=/opt/android-ndk-r18b export TOOLCHAIN=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64 export TARGET=aarch64-linux-android export API=21 export MPP_ROOT=/path/to/mpp_android_install # 交叉编译后的 MPP 库路径 # 交叉编译 FFmpeg 的配置命令 ./configure \ --target-os=android \ # 目标系统为 Android --arch=aarch64 \ # 目标架构为 ARM64 --cpu=armv8-a \ # CPU 指令集 --enable-cross-compile \ # 启用交叉编译 --cross-prefix=$TOOLCHAIN/bin/$TARGET$API- \ # 工具链前缀(如 aarch64-linux-android21---sysroot=$TOOLCHAIN/sysroot \ # 系统根目录 --cc=$TOOLCHAIN/bin/$TARGET$API-clang \ # 指定 C 编译器为 Clang --cxx=$TOOLCHAIN/bin/$TARGET$API-clang++ \ # 指定 C++ 编译器为 Clang++ --enable-rkmpp \ # 启用 Rockchip MPP 硬件加速 --enable-libdrm \ # 启用 libdrm 支持 --extra-cflags="-I$MPP_ROOT/include -fPIC" \ # 添加 MPP 头文件路径和位置无关代码 --extra-ldflags="-L$MPP_ROOT/lib -lmpp" \ # 添加 MPP 库路径并链接 libmpp --enable-shared \ # 生成动态库 --disable-static \ # 禁用静态库 --disable-doc # 禁用文档生成 ``` --- ### **关键步骤说明** #### **1. 工具链配置** - **NDK 路径**:确保 `NDK_ROOT` 指向 NDK r18b 的安装目录。 - **工具链选择**:使用 `llvm` 工具链(NDK r18+ 默认),而非传统的 GCC。 - **目标三元组**:`aarch64-linux-android` 表示目标为 ARM64 Android 设备。 #### **2. 依赖库路径** - **MPP 库**:`MPP_ROOT` 需指向交叉编译后的 MPP 库安装目录(例如 `mpp/build/android/aarch64/install`)。 - 验证 MPP 库架构:`file $MPP_ROOT/lib/libmpp.so` 应输出 `ELF 64-bit LSB shared object, ARM aarch64`。 #### **3. 编译器与链接器** - **Clang 编译器**:NDK r18+ 默认使用 Clang,需通过 `--cc` 和 `--cxx` 明确指定。 - **位置无关代码**:添加 `-fPIC` 确保生成位置无关代码(Android 动态库必需)。 #### **4. 链接参数** - **显式链接 `libmpp`**:通过 `--extra-ldflags="-lmpp"` 确保 FFmpeg 正确链接 MPP 库。 --- ### **完整编译脚本示例** ```bash #!/bin/bash # 设置环境变量(按需修改路径) export NDK_ROOT=/opt/android-ndk-r18b export TOOLCHAIN=$NDK_ROOT/toolchains/llvm/prebuilt/linux-x86_64 export TARGET=aarch64-linux-android export API=21 export MPP_ROOT=/home/user/mpp/build/android/aarch64/install # 替换为实际路径 # 清理并配置 make clean ./configure \ --target-os=android \ --arch=aarch64 \ --cpu=armv8-a \ --enable-cross-compile \ --cross-prefix=$TOOLCHAIN/bin/$TARGET$API- \ --sysroot=$TOOLCHAIN/sysroot \ --cc=$TOOLCHAIN/bin/$TARGET$API-clang \ --cxx=$TOOLCHAIN/bin/$TARGET$API-clang++ \ --enable-rkmpp \ --enable-libdrm \ --extra-cflags="-I$MPP_ROOT/include -fPIC" \ --extra-ldflags="-L$MPP_ROOT/lib -lmpp" \ --enable-shared \ --disable-static \ --disable-doc # 编译并安装 make
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lindsayshuo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值