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):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
随机推荐
- 【转】解决eclipse新导入工程无法run as server
转载地址:http://blog.csdn.net/huang86411/article/details/12118309 问题描述: 从SVN或者别处搞过来的web项目,利用eclipse工具,新建 ...
- IO流知识点总结
IO流的使用:(Input OutPut) 输入输出流: 输入:将文件读到内存中 输出:将文件从内存输出到其他地方 IO技术的作用: 主要就是解决设备和设备之间的数据传输问题.比如: ...
- RTTI: dynamic_cast typeid
dynamic_cast:将基类类型的指针向派生类指针安全转换.多用于下行转换.上行转换时,和static_cast是一样的.C++类型转换看这里.而const_cast用来修改类型的const或vo ...
- 启动tomcat时,报错:IOException while loading persisted sessions: java.io.EOFException解决方法
报错原因:加载持久化session错误,tomcat加载时读取的文件是是*.ser,session序列化文件,文件的位置是tomcat\work\Catalina\localhost,找到sessio ...
- 【RabbitMQ】RabbitMQ的一些基础概念
工作中使用的是RabbitMQ,需要对其进行熟悉.使用之前,弄清楚它是什么东西,解决什么问题. 场景 一些不必实时执行的任务 开发中,有一些任务并无须实时执行,比如: 会员更新个人信息,更新会员信息之 ...
- 一篇说尽Excel常见函数用法
一篇说尽Excel常见函数用法 Word,PPT,Excel这三个Office软件是职场办公里最常用的三个软件,但是我发现简书上写PPT的教程多,Excel的少,即使有,也是零零散散.因为Excel的 ...
- 【转】T-SQL查询进阶—理解SQL Server中的锁
简介 在SQL Server中,每一个查询都会找到最短路径实现自己的目标.如果数据库只接受一个连接一次只执行一个查询.那么查询当然是要多快好省的完成工作.但对于大多数数据库来说是需要同时处理多个查 ...
- strom的使用01
1.strom的安装和测试 1.1 搭建zookeeper集群 参考hadoop2.0初识1.3中的1.4配置zookeeper集群和自动故障转移 1.2 安装storm依赖的软件 sudo yum ...
- shell 从1加到100
- web项目总结——通过jsp+servlet实现对oracle的增删改查功能
1.DAO模式 分包:依次建立 entity:实体包,放的是跟oracle数据库中表结构相对应的对象的属性,也就是这个对象有什么 dao:增删改查接口,实现增删改查的具体方法 service:同dao ...