目前正在做手机底层播放器对的开发,需要用的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编译的更多相关文章

  1. 下面就介绍下Android NDK的入门学习过程(转)

    为何要用到NDK? 概括来说主要分为以下几种情况: 1. 代码的保护,由于apk的java层代码很容易被反编译,而C/C++库反汇难度较大. 2. 在NDK中调用第三方C/C++库,因为大部分的开源库 ...

  2. Linux环境(服务器)下非root用户安装Python3.6

    Linux环境(服务器)下非root用户安装Python3.6 在管理实验室集群时候,遇到的问题--非root用户在搭建自己环境时候,如何搭建. 注意: root用户的根目录是root,非root用户 ...

  3. 【转】Windows环境下Android NDK环境搭建

    原文网址:http://www.metsky.com/archives/525.html 前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员 ...

  4. Windows环境下Android NDK环境搭建

    前面介绍Windows下Android 开发环境配置,主要是面向JAVA开发环境,对只做APK上层应用开发人员来讲,基本够用了,由于Linux系统的权限限制和Android封装架构限制,很多涉及底层设 ...

  5. Android NDK 下的宽字符编码转换及icu库的使用(转)

    原贴http://topic.csdn.net/u/20101022/16/1b2e0cec-b9d2-42ea-8d9c-4f1bb8320a54.html?r=70149216 ,看过并动手实现, ...

  6. Android ndk下用AssetManager读取assets的资源

    转自:http://www.cppblog.com/johndragon/archive/2012/12/28/196754.html 在使用 cocos2dx 在 Android 上进行游戏开发时, ...

  7. 【初体验】macos下android ndk交叉编译hello world,并拷贝到android手机上执行

    1.机器上以前安装了java 1.8(貌似android ndk不需要java) 2. 下载android ndk,版本是android-ndk-r14b (比较奇怪,我下载了最新的android-n ...

  8. Ubuntu 32下Android NDK+NEON的配置过程及简单使用举例

    1.  利用VMware在Windows7 64位下安装Ubuntu13.10 32位虚拟机: 2.  从 https://developer.android.com/tools/sdk/ndk/in ...

  9. Arch Linux 下Android 源代码的下载以及编译

    之前把公司的开发环境由Ubuntu Kylin 换成了Arch Linux.而Arch 下由于种种问题公司的代码一直编只是去.搞定了之后也一直忘了写下来,希望能给相同在Arch 下做Android 开 ...

  10. Linux环境进程间通信(二):信号(下)

    linux下进程间通信的几种主要手段: 管道(Pipe)及有名管道(named pipe):管道可用于具有亲缘关系进程间的通信,有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允 ...

随机推荐

  1. 关于Linq中的Lambda表达式中OrderBy的深入理解

    起因:就是一段Linq语句,OrderBy里面的i是什么? IQueryable<Student> slist = (from s in EFDB.Student select s). O ...

  2. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  3. git简单命令

    1. git status(不代参数) -- 查看本地修改过的文件 git status -s (简洁) 2. git add  -- 添加到暂存区 3. git commit -m '提交的mess ...

  4. HDFS shell

    bin/hdfs -help bin/hdfs dfs -mkdir -p /yfq/test/ bin/hdfs dfs -put /etc/profile /yfq/test/profile 上传 ...

  5. 单据UI代码开发

    1.构造UI项目后,打开生成的UI项目代码,在Model文件下,如初始化一些字段的值 2.订单明细行中行号设置.订单基本操作按钮提示UFIDA.U9.Base.BaseBP.Agent.dll(代理) ...

  6. Eclipse 实现关键字自动补全功能

    一般默认情况下,Eclipse ,MyEclipse 的代码提示功能是比Microsoft Visual Studio的差很多的,主要是Eclipse ,MyEclipse本身有很多选项是默认关闭的, ...

  7. Tomcat安装配置

    Tomcat安装配置 很久没有通过博客对学习所得进行记录了. 现在将使用Tomcat的一些经验和心得写到这里,作为记录和备忘.如果有朋友看到,也请不吝赐教. 1.首先是Tomcat的获取和安装. 获取 ...

  8. jsonp的使用

    假设我们已经了解什么是同源策略,以及什么是浏览器的同源策略的限制. 现在我们需要在a.demo.com下的某个页面one.html 里加载不同域b.demo.com下的json数据. 我们都知道用&l ...

  9. python成长之路【第十一篇】:网络编程之线程threading模块

    一.threading模块介绍 threading 模块建立在 _thread 模块之上.thread 模块以低级.原始的方式来处理和控制线程,而 threading 模块通过对 thread 进行二 ...

  10. PhpStorm配置svn时提示需要证书:authentication required的解决方法,总是弹出

    总是弹出下面的框框,每次输入svn账号密码,还是不行. 于是上网查了半天,需要安装和配置SlikSvn.于是就下载安装了. 完了还是不行,就尝试着配置. 上面和下面的加上,svn.exe的地址. 再次 ...