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
    • 解决方法: 执行 modprobe snd-pcm-oss

      • modprobe  snd-pcm-oss
        
    • 这时候执行完会发现 有了 /dev/dsp/dev/dsp1.

    • 然后往 设备写点内容进去。 在终端输入

      • echo xxxx > /dev/dsp
        
      • echo xxxx > /dev/dsp1
        
    • 最终我这里是发现 /dev/dsp1 会有一声响, 而 /dev/dsp 没有 。

      • 然后我直接 把 /dev/dsp1 改成 /dev/dsp 这样就解决。

      • mv /dev/dsp1 /dev/dsp
        
  • 这样就能播放音乐了。

如果上述的你没能解决,可以试下下面的这种。

然后通过网上说的是

原因是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 安装和移植问题的主要内容,如果未能解决你的问题,请参考以下文章

madplay 安装和移植问题

十七S3C2440 音频解码芯片WM8976声卡驱动移植madplay测试

Madplay移植到mini2440全过程具体解释

移植madplay到ARM板

基于tiny6410的madplay播放器的移植

pcDuino-V2利用madplay播放音乐