madplay 安装和移植问题
Posted 皮卡丘吉尔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了madplay 安装和移植问题相关的知识,希望对你有一定的参考价值。
madplay安装和移植问题
madplay 安装和移植
1. madplay 在 x86 安装 遇到问题
在对 madplay
中 libid3tag-0.15.1b 执行 make
时候 报错
/usr/local/lib/libz.a(deflate.o): relocation R_X86_64_PC32 against symbol `_length_code' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
- 执行和信息如下:
pikaqiu@ubuntu:~/board/rock_3a/madplay/tarball/libid3tag-0.15.1b$ make
make all-recursive
make[1]: Entering directory '/home/pikaqiu/board/rock_3a/madplay/tarball/libid3tag-0.15.1b'
make[2]: Entering directory '/home/pikaqiu/board/rock_3a/madplay/tarball/libid3tag-0.15.1b'
/bin/bash ./libtool --mode=link gcc -Wall -g -O2 -o libid3tag.la -rpath /usr/local/lib -version-info 3:0:3 version.lo ucs4.lo latin1.lo utf16.lo utf8.lo parse.lo render.lo field.lo frametype.lo compat.lo genre.lo frame.lo crc.lo util.lo tag.lo file.lo -lz
gcc -shared .libs/version.o .libs/ucs4.o .libs/latin1.o .libs/utf16.o .libs/utf8.o .libs/parse.o .libs/render.o .libs/field.o .libs/frametype.o .libs/compat.o .libs/genre.o .libs/frame.o .libs/crc.o .libs/util.o .libs/tag.o .libs/file.o -lz -Wl,-soname -Wl,libid3tag.so.0 -o .libs/libid3tag.so.0.3.0
/usr/bin/ld: /usr/local/lib/libz.a(deflate.o): relocation R_X86_64_PC32 against symbol `_length_code' can not be used when making a shared object; recompile with -fPIC
/usr/bin/ld: final link failed: bad value
collect2: error: ld returned 1 exit status
make[2]: *** [Makefile:325: libid3tag.la] Error 1
make[2]: Leaving directory '/home/pikaqiu/board/rock_3a/madplay/tarball/libid3tag-0.15.1b'
make[1]: *** [Makefile:409: all-recursive] Error 1
make[1]: Leaving directory '/home/pikaqiu/board/rock_3a/madplay/tarball/libid3tag-0.15.1b'
make: *** [Makefile:241: all] Error 2
pikaqiu@ubuntu:~/board/rock_3a/madplay/tarball/libid3tag-0.15.1b$
-
解决办法:
-
对
zlib-1.2.3
文件 重新生成Makefile
./configure
-
修改
Makefile
找到CFLAGS
那行, 在最后 添加-fPIC
, 然后保存退出CFLAGS=-O3 -DUSE_MMAP -fPIC
-
执行
make
-
执行
make install
安装完 madplay
准备测试一下。
-
执行
madplay xxx.mp3
报错pikaqiu@ubuntu:~/music$ sudo madplay MattyBRaps_Timber.mp3 madplay: error while loading shared libraries: libid3tag.so.0: cannot open shared object file: No such file or directory
-
这是找不到这个动态库, 我们搜索一下在哪, 发现在
/usr/local/lib/
路径下。pikaqiu@ubuntu:~/board/rock_3a/madplay/tarball$ find /* -name libid3tag.so.0 /usr/local/lib/libid3tag.so.0
-
编辑
/etc/ld.so.conf
文件, 在 文件最后添加 这个路径, 然后保存退出vim /etc/ld.so.conf
-
更新配置
sudo /sbin/ldconfig -v
以为这次可以播放音乐了。但… 说 没有 /dev/dsp
这个文件
我这边用的是 ubuntu 20
pikaqiu@ubuntu:~/music$ madplay MattyBRaps_Timber.mp3
MPEG Audio Decoder 0.15.2 (beta) - Copyright © 2000-2004 Robert Leslie et al.
audio: /dev/dsp: No such file or directory
然后通过网上说的是
原因是madplay使用oss建构,在网上查找了一些资料,可以用alsa支持oss架构
简单解决方法如下:使用madplay解码再使用aplay播放
madplay -o wav:- 1.mp3 | aplay
记得 切换 到 root 用户来运行。,问题解决
2. madplay 移植到 开发板
一共四个文件
libid3tag-0.15.1b.tar.gz
libmad-0.15.1b.tar.gz
madplay-0.15.2b.tar.gz
zlib-1.2.3.tar.gz
-
解压文件 可以加
-C
指定解压完存放位置tar xvzf libid3tag-0.15.1b.tar.gz -C 解压存放的路径 ...
-C
是执行解压后存放的路径 -
编译执行
./configure --host=arm-linux CC=arm-linux-gcc --prefix=存放的路径
-
--host
指定架构 -
CC
指定编译器 -
--prefix
指定存放路径
-
-
这时候会生成了一个
Makefile
我们直接执行make
即可make
-
执行
make install
make install
剩下的那几个也这样.
最后都整完, 在 lib
路径有那些动态库
pikaqiu@ubuntu:~/board/raspberrypi/madplay/target-arm/lib$ ls
libid3tag.a libid3tag.la libid3tag.so libid3tag.so.0 libid3tag.so.0.3.0 libmad.a libmad.la libmad.so libmad.so.0 libmad.so.0.2.1
在 bin
文件 有 madplay
, 通过 file madplay
可以看到 是 ARM 32位的
pikaqiu@ubuntu:~/board/raspberrypi/madplay/target-arm/bin$ ls
abxtest madplay
pikaqiu@ubuntu:~/board/raspberrypi/madplay/target-arm/bin$ file madplay
madplay: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.32, with debug_info, not stripped
pikaqiu@ubuntu:~/board/raspberrypi/madplay/target-arm/bin$
madplay 音量设置参考网址 点我跳转。
以上是关于madplay 安装和移植问题的主要内容,如果未能解决你的问题,请参考以下文章