madplay在arm平台的移植
来源:互联网 发布:工程计量与计价算法 编辑:程序博客网 时间:2024/04/29 21:23
Author :Casy
Date: 2014/8/24
实验目的:
掌握Madplay移植方法。
实验平台:
Ubuntu 12.10 ,mini2440
一,准备源码和库(一共4个压缩包)
准备源代码可以到 ftp://ftp.mars.org/pub/mpeg/ (MAD (MPEG Audio Decoder) - Browse Filesat SourceForge.nethttp://www.underbit.com/products/mad或
http://sourceforge.net/projects/mad/files/)下载madplay-0.15.2b.tar.gz源代码和相关依赖包:
madplay-0.15.2b.tar.gz
libid3tag-0.15.1b.tar.gz
libmad-0.15.1b.tar.gz
另外,还需要zlib库,请到http://www.gzip.org/zlib/下载。目前最新版本是zlib-1.2.8,下载软件包zlib-1.2.8.tar.gz
二,开始移植:
新建目录madplay,并以此为工作目录,并在该目
录中建立以下子目录,以存放不同的文件:
#cd /home
#mkdir madplay
#cd madplay
#mkdir raw-tarsrc-arm target-arm
#MADPLAY_DIR=/home/madplay //相当于宏定义路径变量
#SRC_DIR=$MADPLAY_DIR/src-arm
#TARGET_DIR=$MADPLAY_DIR/target-arm
目录说明:
raw-tar 目录用来存放所有的源代码包
src-arm 目录用来存放ARM 版本的所有源代码文件
target-arm 目录是ARM 版本的安装目录
接下来把从网上下载到的4个源代码包放入raw-tar 目录,然后解压:
$ tar -xzvf madplay-0.15.2b.tar.gz -C $SRC_DIR
$ tar -xzvflibid3tag-0.15.1b.tar.gz -C $SRC_DIR
$ tar -xzvflibmad-0.15.1b.tar.gz -C $SRC_DIR
$ tar -xzvfzlib-1.2.3.tar.gz -C $SRC_DIR
2.1编译安装zlib库 OK
进入生成的zlib-1.2.3目录。
使用configure命令配置库编译选项,包括C编译器、编译选项、链接选项和安装路径等。
$./configure --prefix=$TARGET_DIR
--prefix 为”make install” 命令指引库的安装路径。
然后修改Makefile文件,一共有5处要修改
19 Line:
CC=arm-none-linux-gnueabi-gcc
30行:
LDSHARED=arm-none-linux-gnueabi-gcc
31行:
CPP=arm-none-linux-gnueabi-gcc–E
39:
AR=arm-none-linux-gnueabi-ar
41:
RANLIB=arm-none-linux-gnueabi-ranlib
然后, 用ARM编译工具交叉编译zlib
$ make
生成 .a库和.so库,可以用make test 测试一下库,我操作的时候失败,原因是configure文件有些地方没改过来,但是用GCC编译生成的库测试成功;在此,并不影响使用。
安装库,将编译好的库安装到指定目录下。
$ make install
2.2编译安装libid3tag解码库 OK
# ./configure CC=arm-linux-gcc--host=arm-linux --prefix=/home/madplay/target-armCPPFLAGS=-I/home/madplay/include LDFLAGS=-L/home/madplay/lib
#make
#make install
2.3 编译安装libmad-0.15.1b OK
使用configure命令配置库编译选项,包括C编译器、编译选项、链接选项和安装路径等。(注意:该步骤一定要指定编译器CC=arm-none-linux-gnueabi-gcc,否则make会出错!)
./configure--build=arm-linux CC=arm-none-linux-gnueabi-gcc --prefix=/home/madplay/target-arm
(可选参数:--enable-static --disable-shared)
用ARM编译工具交叉编译libmad-0.15.1b,
$ make
如果你使用的是较高版本的arm-linux-gcc编译器, make 时会出现了“ cc1: error: unrecognizedmand line option "-fforce-mem" 错误,这是因为这个高版本的 gcc没有"-fforce-mem"参数,解的办法是在libmad 文件夹中的Makefile里面查找"-fforce-mem" (129行),将其删除即可。
编译并安装库,将编译好的库安装到指定目录下。
$ make install
2.4 编译 主程序madplay-0.15.2b OK
#./configure CC=arm-linux-gcc --host=arm-linux--prefix=/home/madplay/target-arm CPPFLAGS=-I/home/madplay/include LDFLAGS=-L/home/madplay/lib
(可选的参数:--enable-static --disable-shared --with-pic--disable-debugging )
(实验:加上参数--enable-static --disable-shared),编译结果大小没有变,且仍然需要4个动态库。
--enable-static --disable-shared 表示只使用静态库 ,不适用动态库
编译madplay,#make,即可在当前目录下生成madplay文件。
查看一下改可执行文件需要的动态库:
#arm-linux-readelf -d madplay
输出运行时所需的4个动态库如下:
libmad.so.0 、libid3tag.so.0 、libm.so.6 、libc.so.6 。
将后两个文件从宿主机的/usr/lib 拷贝到开发板的/usr/lib 目录下(先查看开发板上是否存在,如果已经有了则不需要),但是我的Ubuntu12.10的/usr/lib下没有该文件!!!那就查找吧:# find / -name libc.so.6
# find / -name libm.so.6
前两个文件是在/madplay/target-arm/lib/ 下生成的,把这两个文件也拷贝到/usr/lib 下。
2.5 运行测试
静态编译说明:
将静态库文件编译到程序中,运行时不需要动态库文件(这项生成的文件较动态编译的大)在配置libid3tag,libmad,madplay时,加上参数"--disable-shared --enable-static"即可静态编译madplay编译完成后,只需将madplay复制到根文件系统/usr/bin目录下,不需要复制动态库。
三、构建编译脚本build-x86
# cat build-x86#!/bin/shMADPLAY_DIR=$PWDSRC_DIR=src-x86TARGET_DIR=$MADPLAY_DIR/target-x86#tar xvzf./tarball/libid3tag-0.15.1b.tar.gz -C $SRC_DIR#tar xvzf./tarball/libmad-0.15.1b.tar.gz -C $SRC_DIR#tar xvzf./tarball/madplay-0.15.2b.tar.gz -C $SRC_DIRcd$SRC_DIR/libid3tag-0.15.1b./configure--prefix=$TARGET_DIRmake;makeinstallcd ../../cd$SRC_DIR/libmad-0.15.1b./configure--prefix=$TARGET_DIRmake;makeinstallcd ../..cd$SRC_DIR/madplay-0.15.2b./configure--prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include LDFLAGS=-L$TARGET_DIR/libmake;makeinstallcd ../../
- madplay在arm平台的移植
- MP3播放器madplay在ARM平台上的移植
- telnet在arm平台的移植
- boa在ARM平台的移植
- OpenCV在ARM平台上的移植
- telnet在arm平台的移植
- madplay 的移植
- 在arm上编译madplay
- madplay在FS2410下移植
- madplay在AM335X上移植
- 【原】移植madplay到arm linux
- 移植madplay到arm开发板
- Mplayer在ARM平台上的移植总结
- 【实验】Mplayer在ARM平台上的移植
- QT在ARM平台的移植(一)
- QT在ARM平台的移植(二)
- QT在ARM平台的移植(三)
- Qt4.5.2 在ARM平台的搭建、移植详解
- WebService 学习笔记之 集成Spring和Web容器
- C++ 迭代器删除remove/erase
- 编辑距离
- 老鸟的Python入门教程
- hanoi问题的Python完全自己思考解决过程
- madplay在arm平台的移植
- C/C++位运算技巧
- 算法时间复杂度
- 嵌入式 linux下cp带进度条的实现示例代码
- 看HomeKit如何改变物联网和智能家居?
- Delphi异常处理try except语句和try finally语句用法以及区别〖原创+转载〗
- Head First HTML5 Programming 学习笔记
- 解决firefox显示与系统 深色主题冲突的问题
- Leetcode 贪心 container with most water