linux环境下android-ndk下的ffmpeg编译
目前正在做手机底层播放器对的开发,需要用的ffmpeg,因为是新手,所以先从ffmpeg的编译开始做起。虽然是在前人的基础上,但是在linux上编译确实头一遭,因此在编译中,总有些坑是必须要填的,下面就把编译中遇到的坑,以及解决方法分享给大家,希望能够对大家有所帮助。
坑一:在执行configure的时候遇到这样的错误:
../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_so.o: No such file or directory
查阅很多网上的文献,分析的原因都是配置默认的路径和实际路径不符合,导致无法找到所需要的文件,因此需要指定系统路径,方法如下:
NDK=<你的ndk路径>/android-ndk-r10e
SYSROOT=$NDK/platforms/android-9/arch-arm/
./configure $FFMPEG_FLAGS --extra-cflags="$CFLAGS" --extra-ldflags="$LDFLAGS" --sysroot=$SYSROOT
这样尝试之后,configure编译通过,接下来,将遇到第二个坑,请看,
坑二:在执行make时遇到这样的问题:在library.mak中,遇到这样的错误,...ffmpeg/library.mak:106:*missing separator.stop, 查看第106行发现是这样的语句:
$(eval $(RULES))
感觉很奇怪,于是求助万能的网络,发现这个原因为windows和linux格式不同导致的(我为什么要在windows上做linux开发,哭泣中......),哭完了,回头看问题的分析和解决。
linux和windows的不同之处不仅在tab(\t)在句尾也有区别(LF VS CRLF)
在linux版本下,是这样的:

在windows下,是这样滴:

看到区别了吧,就是这样滴,一般来说window和linux的格式区别,使用dos2unix都能搞定,事实上,在执行代码之前,我也进行了dos2unix的操作,但是......
不幸还是发生了。这是因为如果不是直接从git上复制的代码,而是下载从一个git 副本产生的tar/zip文件,句尾就会被保留,我的linux机上的代码是从一个git 副本,没有经过压缩,直接copy到linux机上的,估计也产生了上述的问题。解决方法为,使用如下的步骤:
$git config core.autocrlf false
$delete all *.mak files
$git reset --hard
执行了上述步骤后,这个坑算是被填平了,不过我太天真了,呜呜呜......
坑三:在执行make时,竟然产生了和坑一同样的问题,../lib/gcc/arm-linux-androideabi/4.8/../../../../arm-linux-androideabi/bin/ld: error: cannot open crtbegin_so.o: No such file or directory,这是为什么,为什么,有句话说在同一个坑里跌倒是愚蠢,但是我真的不是愚蠢啊!!!,在编译脚本中添加打印信息,定位到了这样一句话,$CC -o $PREFIX/libs/libffmpeg.so -shared $CFLAGS $LDFLAGS \,再结合错误信息,分析应该是编译器的路径找不到,于是在脚本中添加系统路径,如下:export CC="arm-linux-androideabi-gcc --sysroot=$SYSROOT",再次编译果然成功了。
通过上面遇到的三个坑发现,编译时,指定好系统路径十分重要,而且很多坑都是由于细节没有考虑到产生的。但是如果没有遇到过,一时又会觉得很困扰,再次记录下来,希望能够帮助大家少走弯路。
linux环境下android-ndk下的ffmpeg编译的更多相关文章
- 下面就介绍下Android NDK的入门学习过程(转)
为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 2. 在NDK中调用第三方C/C++库,因为大部分的开源库 ...
- Linux环境(服务器)下非root用户安装Python3.6
Linux环境(服务器)下非root用户安装Python3.6 在管理实验室集群时候,遇到的问题--非root用户在搭建自己环境时候,如何搭建. 注意: root用户的根目录是root,非root用户 ...
- 【转】Windows环境下Android NDK环境搭建
原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员 ...
- Windows环境下Android NDK环境搭建
前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设 ...
- Android NDK 下的宽字符编码转换及icu库的使用(转)
原贴http://topic.csdn.net/u/20101022/16/1b2e0cec-b9d2-42ea-8d9c-4f1bb8320a54.html?r=70149216 ,看过并动手实现, ...
- Android ndk下用AssetManager读取assets的资源
转自:http://www.cppblog.com/johndragon/archive/2012/12/28/196754.html 在使用 cocos2dx 在 Android 上进行游戏开发时, ...
- 【初体验】macos下android ndk交叉编译hello world,并拷贝到android手机上执行
1.机器上以前安装了java 1.8(貌似android ndk不需要java) 2. 下载android ndk,版本是android-ndk-r14b (比较奇怪,我下载了最新的android-n ...
- Ubuntu 32下Android NDK+NEON的配置过程及简单使用举例
1. 利用VMware在Windows7 64位下安装Ubuntu13.10 32位虚拟机: 2. 从 https://developer.android.com/tools/sdk/ndk/in ...
- Arch Linux 下Android 源代码的下载以及编译
之前把公司的开发环境由Ubuntu Kylin 换成了Arch Linux.而Arch 下由于种种问题公司的代码一直编只是去.搞定了之后也一直忘了写下来,希望能给相同在Arch 下做Android 开 ...
- Linux环境进程间通信(二):信号(下)
linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
随机推荐
- jqGrid subGrid配置 如何首次加载动态展开所有的子表格
有时候需求需要默认加载表格的时候把子表格的数据也显示出来,经过研究相关SubGrids API配置如下: 属性 类型 描述 默认值 subGrid boolean 设置为true启用子表格.如果启用子 ...
- 基于layerpage 前后端异步分页
#下载jquery 和 layerpage1.核心分页方法 laypage({ cont: 'page1', //容器.值支持id名.原生dom对象,jquery对象. pages: json.tot ...
- hybird混合式开发搭建
1.xml <?xml version="1.0" encoding="utf-8"?> <WebView xmlns:android=&qu ...
- linux两台服务器之间文件/文件夹拷贝
跨服务器拷贝需要用到的命令是scp. ----------------------拷贝文件夹---------------------------------------------- 把当前文件夹t ...
- 描述性统计分析-用脚本将统计量函数批量化&分步骤逐一写出
计算各种描述性统计量函数脚本(myDescriptStat.R)如下: myDescriptStat <- function(x){ n <- length(x) #样本数据个数 m &l ...
- html5的新特性——拖放API
在HTML5之前只能使用鼠标事件模拟出"拖放"效果:HTML5专门为拖放提供了7个事件句柄. 被拖动的源对象可以触发的事件: (1)ondragstart:源对象开始被拖动 (2 ...
- JavaScript parseInt() 函数
定义和用法 parseInt() 函数可解析一个字符串,并返回一个整数. 语法 parseInt(string, radix) 参数 描述 string 必需.要被解析的字符串. radix 可选.表 ...
- Cheatsheet: 2016 07.01 ~ 07.31
Mobile What to Expect From Swift 3 Web A practical security guide for web developers Gulp Succinctly ...
- kali4.0 下tftpd-hpa服务无法启动的解决方案
一.前情提要: OS:Kali4.0 64bit 使用以下命令启动tftpd-hpa服务失败: sudo /etc/init.d/tftpd-hpa 二.解决方案: 1.输入以下命令: sudo in ...
- MySQL 5.7 解压版安装配置
测试环境 系统:Windows 10专业版 版本:MySQL Server 5.7.14 提纲 修改配置文件 初始化 安装服务.启动服务 修改root密码 步骤 1.解压安装包 在MySQL官 ...