madplay在arm平台的移植
2014-08-30 15:32
316 查看
Author :Casy
Date: 2014/8/24
实验目的:
掌握Madplay移植方法。
实验平台:
Ubuntu 12.10 ,mini2440
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
录中建立以下子目录,以存放不同的文件:
#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
使用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
#make
#make install
./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
(可选的参数:--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 下。
静态编译说明:
将静态库文件编译到程序中,运行时不需要动态库文件(这项生成的文件较动态编译的大)在配置libid3tag,libmad,madplay时,加上参数"--disable-shared --enable-static"即可静态编译madplay编译完成后,只需将madplay复制到根文件系统/usr/bin目录下,不需要复制动态库。
Date: 2014/8/24
实验目的:
掌握Madplay移植方法。
实验平台:
Ubuntu 12.10 ,mini2440
一,准备源码和库(一共4个压缩包)
准备源代码可以到 ftp://ftp.mars.org/pub/mpeg/ (MAD (MPEG Audio Decoder) - Browse FilesatSourceForge.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 运行测试
文件都就绪了之后(可以nfs挂载,也可以ftfp传输),在开发板上# madplay -S -r TheSoundOfSilence.mp3静态编译说明:
将静态库文件编译到程序中,运行时不需要动态库文件(这项生成的文件较动态编译的大)在配置libid3tag,libmad,madplay时,加上参数"--disable-shared --enable-static"即可静态编译madplay编译完成后,只需将madplay复制到根文件系统/usr/bin目录下,不需要复制动态库。
三、构建编译脚本build-x86
上面一长串操作确实比较麻烦,尝试编写一个shell脚本,但是时间有限未完成,待续。。。。# cat build-x86 #!/bin/sh MADPLAY_DIR=$PWD SRC_DIR=src-x86 TARGET_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_DIR cd$SRC_DIR/libid3tag-0.15.1b ./configure--prefix=$TARGET_DIR make;makeinstall cd ../../ cd$SRC_DIR/libmad-0.15.1b ./configure--prefix=$TARGET_DIR make;makeinstall cd ../.. cd$SRC_DIR/madplay-0.15.2b ./configure--prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include LDFLAGS=-L$TARGET_DIR/lib make;makeinstall cd ../../
相关文章推荐
- 移植mysql到arm平台
- 移植MySQL到嵌入式ARM平台
- ARM平台移植libcurl curl-7.49.0
- 移植Python2.7到ARM-LINUX嵌入式平台
- 移植glib库,procps到arm平台
- 在ARM-Linux平台上移植SQLite
- 移植Android系统到基于ARM的平台上-从零到启动
- ARM平台上蓝牙协议栈Bluez的移植使用和配置
- iptables-1.4.12.1移植到arm平台
- Qt5.3.2在ARM-Linux平台的移植
- Kinect移植到嵌入式ARM平台上面
- ARM平台上蓝牙协议栈Bluez的移植使用和配置
- 移植mysql到arm平台
- 移植MySQL到嵌入式ARM平台
- ossp-uuid-1.6.2移植到arm平台
- ARM平台上蓝牙协议栈Bluez的移植使用和配置
- Qt Embedded4.6.2与tslib1.4移植到arm平台
- openssl 客户端程序移植到arm平台 OK6410上运行
- arm平台gdb移植实践笔记
- x264之c64x+平台移植(二):arm端应用程序编译