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):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
随机推荐
- TOAD和PLSQL 默认日期显示、rowid显示、TNSNAME的修改
先说下要解决的问题: select rowid,acct_id,state_date from acct; 修改后,1)sql指明rowid,可以显示出来 2)时间格式显示为YYYYMMDD HH24 ...
- ASP.net如何保证EF操作类线程内唯一
说到线程内唯一,肯定会想到单例模式,但是如果多用户访问网站就会出现问题.ASP.net中有两种方法可以保证EF操作类线程内唯一(目前只会这两种,以后有好的方法再添加): 1.httpcontext(实 ...
- 百度之星初赛2A 1001 ALL X(HDU 5690)
All X Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...
- Bootstrap Modal 垂直方向加滚动条
原文链接:http://blog.csdn.net/cyh1111/article/details/52960747 背景 使用Bootstrap Modal实现用户资料修改,由于用户信息过多,默认M ...
- Selenium的PO模式(Page Object Model)|(Selenium Webdriver For Python)
研究Selenium + python 自动化测试有近两个月了,不能说非常熟练,起码对selenium自动化的执行有了深入的认识. 从最初无结构的代码,到类的使用,方法封装,从原始函数 ...
- 27.solr集群
搭建solr集群整个架构: 前提: (1)zookeeper集群 (2)最好做系统间拷贝免密码(频繁复制东西输密码太麻烦) (3)软件solr.*.zip zookerper.*.tar.gz i ...
- 《与小卡特一起学Python》 Code6 注释
"""这是一个包括多行的注释, 使用了三重引号字符串. 这不完全是注释,不过也可以相当于注释. """ #***************** ...
- asp.net mvc bundle中数组超出索引
在使用bundle 来加载css的时候报错了, @Styles.Render("~/bundles/appStyles") 第一反应 以为是的css 太多了,可是当我这个style ...
- js小程序写法优化
(function(){ var gcld_but = document.getElementById("gcld_but"), gcld_but_li = gcld_but.ge ...
- 微软亚洲实验室一篇超过人类识别率的论文:Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification ImageNet Classification
在该文章的两大创新点:一个是PReLU,一个是权值初始化的方法.下面我们分别一一来看. PReLU(paramter ReLU) 所谓的PRelu,即在 ReLU激活函数的基础上加入了一个参数,看一个 ...