目前正在做手机底层播放器对的开发,需要用的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):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...
随机推荐
-
Maven远程仓库的配置
在很多情况下,默认的*仓库无法满足项目的需求,可能项目需要的构件存在于另外一个远程仓库中,如JBoss Maven仓库.这时,可以在POM中配置该仓库,见代码如下: <!-- 远程仓库的配置 ...
-
【追寻javascript高手之路01】javascript参数知多少?
前言 我最近在思考一个问题,我本身平时还是积累了不少东西,面试时候问的东西基本逃不出写的博客(当然,高级阶段的就不行了),但是真的被问到时我却不一定答得上来. 知道且能回答,回答的效果都不是很好... ...
-
JavaScript与DOM的关系
JavaScript与浏览器的工作 1.浏览器获取并加载你的页面,从上至下解析它的内容. 遇到JavaScript时,浏览器会解析代码,检查它的正确性,然后执行代码. 浏览器还会建立一个HTML页面的 ...
-
USACO3.42American Heritage(二叉树)
已知中前 求后序 递归一下 有一些小细节 /* ID: shangca2 LANG: C++ TASK: heritage */ #include <iostream> #include& ...
-
跳转APP(app之间互相通信)
摘要 步骤: 1,添加URL Types项 2,配置URL Scheme 3,其他应用的跳转 4,参数的接收 开发IOS项目的时候,有可能会遇到两个APP应用相互调用的需求,比如说:支付宝支付.. ...
-
初识C语言 (四)
分支结构 if语句 C语言中的分支结构语句中的if条件语句,简单if语句的基本结构如下: 其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句. 其过程可表示为下图 实例: if(resu ...
-
卷积运算的本质,以tensorflow中VALID卷积方式为例。
卷积运算在数学上是做矩阵点积,这样可以调整每个像素上的BGR值或HSV值来形成不同的特征.从代码上看,每次卷积核扫描完一个通道是做了一次四重循环.下面以VALID卷积方式为例进行解释. 下面是pyth ...
-
centos7 配置ip
1. 切换到root用户下: su root 2.进入network-scripts目录: cd /etc/sysconfig/network-scripts/ 3.该目录下一般第一个文件是主文件,我 ...
-
vue-router单页应用简单示例(一)
请先完成了项目初始化,具体请看我另一篇博文.vue项目初始化 看一下完成的效果图,很典型的单页应用. .vue后缀名的单文件组件 这里先说一下我对组件的理解.组件,顾名思义就是一组元素组成的一个原 ...
-
P4289 [HAOI2008]移动玩具(bfs)
P4289 [HAOI2008]移动玩具 双向bfs+状态压缩+记忆化搜索 双向bfs用于对bfs的优化,每次找到可扩展节点少的一边进行一次bfs,找到的第一个互相接触的点即为最短路径 矩阵范围仅4* ...