1.报fatal error: asm/types.h: No such file or directory

/sysroot/usr/include/linux/types.h:21:23: fatal error: asm/types.h: No such file or directory

#include

解决方案:在--extra-cflags添加头文件目录

--extra-cflags="-I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/arm-linux-androideabi" \

2.报./libavutil/avassert.h:30:20: fatal error: stdlib.h: No such file or directory

./libavutil/avassert.h:30:20: fatal error: stdlib.h: No such file or directory

#include

解决方案:在--extra-cflags添加

--extra-cflags=" -isysroot $ISYSROOT"

完整的构建脚本如下:

# 配置NDK路径

NDK=/Users/kevinchen/android-ndk-r17c

# 指定了交叉编译环境,使其在编译过程中能够引用到 NDK 提供的原生标头和共享库文件

SYSROOT=$NDK/platforms/android-23/arch-arm/

ISYSROOT=$NDK/sysroot

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64

#声明方法

function build_one

{

./configure --prefix=$PREFIX --enable-shared --disable-static --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffprobe --disable-avdevice --disable-symver --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- --target-os=linux --arch=armeabi-v7a --enable-cross-compile --sysroot=$SYSROOT --extra-cflags="-Os -isysroot $ISYSROOT -fpic $ADDI_CFLAGS -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/arm-linux-androideabi" --extra-ldflags="$ADDI_LDFLAGS" $ADDITIONAL_CONFIGURE_FLAG

make clean

make

make install

}

CPU=armeabi-v7a

PREFIX=$(pwd)/android/$CPU

ADDI_CFLAGS="-marm"

build_one

编译中可能会遇到的一些错误

错误一

libavcodec/aaccoder.c: In function 'search_for_ms':

libavcodec/aaccoder.c:803:25: error: expected identifier or '(' before numeric constant

int B0 = 0, B1 = 0;

^

libavcodec/aaccoder.c:865:28: error: lvalue required as left operand of assignment

B0 += b1+b2;

^

libavcodec/aaccoder.c:866:25: error: 'B1' undeclared (first use in this function)

B1 += b3+b4;

^

libavcodec/aaccoder.c:866:25: note: each undeclared identifier is reported only once for each function it appears in

make: *** [libavcodec/aaccoder.o] Error 1

解决:将libavcodec/aaccoder.c文件B0变量替换成b0

错误二

libavcodec/hevc_mvs.c: In function 'derive_spatial_merge_candidates':

libavcodec/hevc_mvs.c:208:15: error: 'y0000000' undeclared (first use in this function)

((y ## v) >> s->ps.sps->log2_min_pu_size))

^

libavcodec/hevc_mvs.c:204:14: note: in definition of macro 'TAB_MVF'

tab_mvf[(y) * min_pu_width + x]

^

libavcodec/hevc_mvs.c:274:16: note: in expansion of macro 'TAB_MVF_PU'

(cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))

^

libavcodec/hevc_mvs.c:368:23: note: in expansion of macro 'AVAILABLE'

is_available_b0 = AVAILABLE(cand_up_right, B0) &&

^

libavcodec/hevc_mvs.c:208:15: note: each undeclared identifier is reported only once for each function it appears in

((y ## v) >> s->ps.sps->log2_min_pu_size))

^

libavcodec/hevc_mvs.c:204:14: note: in definition of macro 'TAB_MVF'

tab_mvf[(y) * min_pu_width + x]

^

libavcodec/hevc_mvs.c:274:16: note: in expansion of macro 'TAB_MVF_PU'

(cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))

^

libavcodec/hevc_mvs.c:368:23: note: in expansion of macro 'AVAILABLE'

is_available_b0 = AVAILABLE(cand_up_right, B0) &&

^

libavcodec/hevc_mvs.c:207:15: error: 'x0000000' undeclared (first use in this function)

TAB_MVF(((x ## v) >> s->ps.sps->log2_min_pu_size), \

^

libavcodec/hevc_mvs.c:204:34: note: in definition of macro 'TAB_MVF'

tab_mvf[(y) * min_pu_width + x]

^

libavcodec/hevc_mvs.c:274:16: note: in expansion of macro 'TAB_MVF_PU'

(cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))

^

libavcodec/hevc_mvs.c:368:23: note: in expansion of macro 'AVAILABLE'

is_available_b0 = AVAILABLE(cand_up_right, B0) &&

^

libavcodec/hevc_mvs.c: In function 'ff_hevc_luma_mv_mvp_mode':

libavcodec/hevc_mvs.c:208:15: error: 'y0000000' undeclared (first use in this function)

((y ## v) >> s->ps.sps->log2_min_pu_size))

^

libavcodec/hevc_mvs.c:204:14: note: in definition of macro 'TAB_MVF'

tab_mvf[(y) * min_pu_width + x]

^

libavcodec/hevc_mvs.c:274:16: note: in expansion of macro 'TAB_MVF_PU'

(cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))

^

libavcodec/hevc_mvs.c:683:24: note: in expansion of macro 'AVAILABLE'

is_available_b0 = AVAILABLE(cand_up_right, B0) &&

^

libavcodec/hevc_mvs.c:207:15: error: 'x0000000' undeclared (first use in this function)

TAB_MVF(((x ## v) >> s->ps.sps->log2_min_pu_size), \

^

libavcodec/hevc_mvs.c:204:34: note: in definition of macro 'TAB_MVF'

tab_mvf[(y) * min_pu_width + x]

^

libavcodec/hevc_mvs.c:274:16: note: in expansion of macro 'TAB_MVF_PU'

(cand && !(TAB_MVF_PU(v).pred_flag == PF_INTRA))

^

libavcodec/hevc_mvs.c:683:24: note: in expansion of macro 'AVAILABLE'

is_available_b0 = AVAILABLE(cand_up_right, B0) &&

^

make: *** [libavcodec/hevc_mvs.o] Error 1

解决:将libavcodec/hevc_mvs.c文件的变量B0改成b0,xB0改成xb0,yB0改成yb0

问题三

libavcodec/opus_pvq.c: In function 'quant_band_template':

libavcodec/opus_pvq.c:498:9: error: expected identifier or '(' before numeric constant

int B0 = blocks;

^

libavcodec/opus_pvq.c:559:12: error: lvalue required as left operand of assignment

B0 = blocks;

^

make: *** [libavcodec/opus_pvq.o] Error 1

解决:将libavcodec/opus_pvq.c文件的变量B0改成b0

android-ndk-r17c,使用android-ndk-r17c构建ffmpeg 4.2.1时遇到的问题相关推荐

  1. 【Android NDK 开发】Android Studio 使用 CMake 导入动态库 ( 构建脚本路径配置 | 指定动态库查找路径 | 链接动态库 )

    文章目录 I . CMake 引入动态库与静态库区别 II . Android Studio 中 CMake 引入动态库流程 III . 指定动态库查找路径 IV . 链接函数库 V . 完整代码示例 ...

  2. 【Android NDK 开发】Android Studio 使用 CMake 导入静态库 ( CMake 简介 | 构建脚本路径配置 | 引入静态库 | 指定静态库路径 | 链接动态库 )

    文章目录 I . CMake 简介 II . Android Studio 中 CMake 引入静态库流程 III . 指定 CMake 最小版本号 IV . 导入函数库 ( 静态库 / 动态库 ) ...

  3. 【Android NDK 开发】Android Studio 的 NDK 配置 ( 源码编译配置 | 构建脚本配置 | 打包配置 | CMake 配置 | ndkBuild 配置 )

    文章目录 I . 源码编译配置 II . 构建脚本配置 III . NDK 函数库打包配置 IV . Java 与 C 代码示例 V . CMake 配置 ( CMakeLists.txt ) VI ...

  4. 【Android NDK 开发】Android.mk 配置静态库 ( Android Studio 配置静态库 | 配置动态库与静态库区别 | 动态库与静态库打包对比 )

    文章目录 I . Android Studio 中使用 Android.mk 配置静态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  5. 【Android NDK 开发】Android.mk 配置动态库 ( Android Studio 配置动态库 | 动态库加载版本限制 | 本章仅做参考推荐使用 CMake 配置动态库 )

    文章目录 I . Android Studio 中使用 Android.mk 配置动态库 总结 II . 第三方动态库来源 III . 配置 Android.mk 构建脚本路径 IV . 预编译 第三 ...

  6. android 设置功能,NDK 使用入门  |  Android NDK  |  Android Developers

    原生开发套件 (NDK) 是一套工具,使您能够在 Android 应用中使用 C 和 C++ 代码,并提供众多平台库,您可使用这些平台库管理原生 Activity 和访问实体设备组件,例如传感器和触摸 ...

  7. protobuf android ndk,直接在Android NDK端使用tensorflow(不使用JAVA api)

    这是我如何解决这个问题.虽然没有太多关于在an​​droid上使用c apis以及编译和链接tensorflow到NDK的文档,但是makefile有重要的注释以及相关的脚本.编译步骤与ios非常相似 ...

  8. android源码中的ndk,如何在不需要Android操作系统源代码的情况下在Android NDK中创建新的NativeWindow?...

    我想编译一个Android OpenGL控制台应用程序,您可以直接从控制台启动Android x86或从Android x86 GUI中的Android终端应用程序运行.如何在不需要Android操作 ...

  9. 【Android】Eclipse自动编译NDK/JNI的三种方法

    [Android]Eclipse自动编译NDK/JNI的三种方法 SkySeraph Sep. 18th  2014 Email:skyseraph00@163.com 更多精彩请直接访问SkySer ...

最新文章

  1. 在后台代码中引入XAML的方法
  2. c语言socket句柄函数传递,通过源码解析 Node.js 中进程间通信中的 socket 句柄传递...
  3. III 25 git
  4. Linux课程---11、Linux中软件安装和调试
  5. hdu 4524 郑厂长系列故事——逃离迷宫
  6. 树莓派3 kali linux很卡,树莓派3装kali Linux 成功写入 但是点不亮 为什么?
  7. 【Java】Fibonacci数列编程实现
  8. python中keyboardinterrupt_为什么我不能在python中处理KeyboardInterrupt?
  9. 用html代码实现做题记分,html解析cricinfo记分卡
  10. 【转】凡是能拉进与妹子距离的产品都是好产品
  11. 字符型数据与整型数据的混合操作
  12. c语言运行出现-1 j,c语言中,y[ j ] = -1什么意思?
  13. 实施ERP过程中必须注意的“后天条件”
  14. 架构系列---发号器(全局唯一ID生成器)系统设计方案和思路
  15. Flash 第九章 运动补间动画
  16. 端口映射抖音去水印源码
  17. 华为员工魂丧非洲【转发】
  18. (predicted == labels).sum().item()作用
  19. java 队列线程池_Java线程池Executor使用
  20. 如何快速学习flex

热门文章

  1. MyBatis Plus 联表查询
  2. javaScript模块化解析
  3. Java上传文件(FileItem类)
  4. jQuery 怎样判断鼠标点击的是左键还是右键
  5. C语言操作符—左移右移操作符
  6. 很厉害很有用的Hosts,其实很简单!
  7. 2020年包河区青少年信息学竞赛小学组试题
  8. 大战AV终结者(三)。。激战
  9. 腾讯天气的API接口
  10. 不论选择如何,我们都会有光明的前途!