FFmpeg 4.0 Android平台编译失败求助(Ubuntu 64位环境)
解决FFmpeg 4.0 Android编译中
stdint.h缺失的问题 我看你在Ubuntu 64位环境下编译FFmpeg 4.0 for Android时踩了头文件找不到的坑,这在NDK交叉编译里挺常见的,主要是配置参数和NDK版本适配的问题,咱们一步步来修正:
先分析错误根源
你遇到的fatal error: stdint.h: No such file or directory,本质是编译器找不到Android系统的标准头文件,主要是因为这几个配置失误:
- 目标系统设置错误:你给的
--target-os=linux是针对Linux桌面的,编译Android必须改成--target-os=android,否则FFmpeg的配置脚本不会适配Android的头文件路径。 - API等级过于老旧:
android-14(对应Android 4.0)在新版NDK里已经被废弃,很多头文件和工具链都不再支持,建议至少升级到android-21(Android 5.0)。 - 编译参数语法错误:你的
-DNDEBUG-march=armv5te少了空格,变成了一个无效的宏定义,导致后续编译参数混乱,编译器无法定位正确的头文件路径。
修正后的构建脚本
我把你的脚本做了关键修改,标注了改动点,你可以直接使用:
# 升级API等级到android-21,适配新版NDK SYSROOT=/home/lit/Android/Sdk/ndk-bundle/platforms/android-21/arch-arm/ TOOLCHAIN=/home/lit/Android/Sdk/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 # 先清理旧编译缓存(重要!避免残留配置干扰) cd ffmpeg/ffmpeg && make clean && make distclean PATH="$HOME/bin:$PATH" PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig" ./configure \ --prefix="$HOME/ffmpeg_build" \ --pkg-config-flags="--static" \ # 修正了CFLAGS的空格错误,确保每个参数独立 --extra-cflags="-O3 -Wall -pipe -ffast-math -fstrict-aliasing -Werror=strict-aliasing -Wno-psabi -Wa,--noexecstack -DANDROID -DNDEBUG -march=armv5te -mtune=arm9tdmi -msoft-float --sysroot=$SYSROOT" \ --extra-ldflags="-L$HOME/ffmpeg_build/lib --sysroot=$SYSROOT" \ --bindir="$HOME/bin" \ --arch=arm \ # 核心修改:target-os改为android --target-os=android \ --enable-cross-compile \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --cpu=armv5te \ --sysroot=$SYSROOT \ --enable-gpl \ --enable-small \ --enable-nonfree && \ # 用nproc自动获取CPU核心数,提升编译速度 PATH="$HOME/bin:$PATH" make -j$(nproc) && \ make install && \ hash -r
额外注意事项
- 验证头文件路径:手动检查
$SYSROOT/usr/include/stdint.h是否存在,如果不存在,说明你的NDK没有这个API等级的文件,那就换个更高的API等级(比如android-23)。 - NDK版本适配:如果你用的是NDK r17+,arm-linux-androideabi-4.9工具链还能正常使用;如果是r21+,建议换成clang工具链(把cross-prefix改成
$TOOLCHAIN/bin/arm-linux-androideabi-clang),FFmpeg 4.0对clang的兼容性也很好。 - 重复编译前清理:每次重新配置前一定要执行
make clean和make distclean,避免旧的配置残留导致奇怪的错误。
按这个脚本运行应该能解决头文件找不到的问题,如果还有其他错误,把新的日志贴出来就行~
内容的提问来源于stack exchange,提问作者user1552075
相关产品推荐
相关产品推荐

