交叉编译(音频篇)
交叉编译的原理
*音视频交叉编译的重要性,包括X264,FDK_AAC,LAME,最终将以LAME库为例完成一个将音频的PCM数据编码成MP3的实例
交叉编译的原理
1.PC上运行一个二进制文件,要有源代码然后在PC上进行编译链接生成可执行文件,最后在终端执行文件。当然最重要的是编译器和链接器了,对于C/C++程序来讲,就是gcc和g++,而编译器是预先安装到机器上的,使用本机器的编译器,将源代码编译成为一个可以在本机器上运行的程序。这是正常编译的过程,也称为本机编译。2.了解了本机编译,在说交叉编译,就是在一个平台上生成另外一个平台的可执行代码。在嵌入式设备中进行本地编译是不大可能,一是因为计算能力的问题,还有一个是编译工具及整个编译过程异常繁琐,直接在ARM平台上进行本地编译是不大可能。而具有更加强劲的计算能力与更大存储空间的PC才是理想的选择,所以大部分的嵌入式开发平台提供了本身工具编译链,开发者通过交叉编译工具链就能在PC上编译出可以运行在ARM平台下的程序了。3.交叉工具编译链工具:CC,AS,AR,LD,NM,GDB..CC:编译器,对C源文件进行编译处理,生成汇编文件.AS:将汇编文件生成目标文件.AR:打包器,用于库操作,可以通过该工具从一个库中删除或者增加目标代码模块。.LD:链接器,为前面生成的目标代码分配地址空间,将多个目标文件链接成一个库或是可执行文件。.GDB:调试工具,可以对运行过程中的程序进行代码调试工作。.STRIP:以最终生成的可执行文件或者库文件作为输入,然后清除其中的源码。.NM:查看静态库文件中的符号表。.Objdump:查看静态库或者动态库的方法签名。
iOS平台交叉编译的实践
1.LAME最新版本:https://sourceforge.net/projects/ 主页搜索Lame下载脚本地址:https://github.com/kewlbear/lame-ios-build2.shell的配置选项--prefix:指定将编译好的库放在哪个目录下--host:指定最终库要运行的平台.CC:指交叉工具编译链的路径,其实这里就是指定的gcc的路径.CFLAGS:指定编译时带的参数。Shell脚本中指定-march的arm7平台,代表编译的库运行的目标平台是arm7平台,指定打开bitcode选项,可以将enable-bitcode选项设置为YES..LDFLAGS:指定链接过程中的参数,同样也带上bitcode参数,App支持最低iOS版本选项参数。.--disable-shared:通常是GNU标准中关闭动态链接库的选项.--disable-fronted:不编译出LAME的可执行文件.合并指令集的静态库 lipo -create xx.a yy.a -output zz.a.查询静态库的指令集 file + xx.a(静态库的绝对路径)
FDK_AAC的交叉编译
*FDK_AAC是用来编码和解码AAC格式音频文件的开源库
安装automake
*brew install automake libtool在Mac上面编译FFmpeg需要安装很多东西,首先是:autoconf 和 automake,automake管理makefile的源码就可以轻松使用了,另外:
安装pkg-config
由于大部分的开源工程都需要用到pkg-config,在这里附带讲解一下pkg-config for mac 安装过程.
1.检测环境是否已安装pkg-config
再命令行中输入: pkg-config 若未安装,则提示命令未找到.
2.安装pkg-config
curl http://pkgconfig.freedesktop.org/releases/pkg-config-0.28.tar.gz -o pkg-config-0.28.tar.gztar -xf pkg-config-0.28.tar.gzcd pkg-config-0.28./configure --with-internal-glibmake sudo make install