如何在PC和arm中的虚拟机中制作一个mp3 player。
需要准备的库文件有zlib-1.2.3.tar.gz,libid3tag-0.15.1b.tar.gz,libmad-0.15.1b.tar.gz,madplay-0.15.2b.tar.gz。
zlib-1.2.3.tar.tar用于文件的压缩和解压
libid3tag-0.15.1b.tar.gz mp3的解码库
libmad-0.15.1b.tar.gz madplay的库文件
madplay-0.15.2b.tar.gz 播放程序的压缩包,mp3播放器的源码。
在PC环境下配置和编译madplay,并使用madplay播放mp3.

1.安装zlib-1.2.3.tar.gz
解压过后,进入源码目录。
linux中.a后缀为静态库,.so文件为动态库。解压后的库文件可在/usr/lib中查看
先要对其进行配置,生成Makefile。
执行./configure(保证configure文件是可执行的就可)
make
make生成libz.a库
再把生成的库安装到系统中
make install
在/usr/local/lib中。
后续的安装与此相同。

2.安装libid3tag-0.15.1b

3.安装libmad-0.15.1b
安装的时候出现一个错误。
cc1: error: unrecognized command line option “-fforce-mem”
解决方式是:找到libmad configure之后的Makefile
找到包含”-fforce-mem”字符串,将其删除,就可以了。
原因是gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误。

4.安装madplay-0.15.2b

5.执行madplay
./madplay filename.mp3
又出现错误
./madplay: error while loading shared libraries: libmad.so.0: cannot open shared object file: No such file or directory
有网友是这么解释的
软连接只是一个躯壳。动态链接库的版本不对。libmad.so.0这是你需要的,虽然那里存在一个libmad.so.0,但是它是指向其它的版本的一个软连接,所以程序就会发生读取错误的信息了。解决方法就是降低那个动态链接库的版本,直接搞一个过去,或者卸载现在的,安装较低版本的。
意思就是要重新下个低版本的库。
我是参考另外一个网友的解决方法的
I looked for libmp3lame.so and found one in /usr/local/lib (evidently, ffmpeg couldn’t see it there; ffmpeg was searching for libmp3lame.so.0 in /usr/lib/, not in /usr/local/lib/). It was clear that /usr/local/lib/libmp3lame.so is a symlink to/usr/local/lib/libmp3lame.so.0.0.0. So all I had to do was making one moresymlink in /usr/lib/, pointing at /usr/local/lib/libmp3lame.so.0.0.0:
虽然目的不一样,但是出现的错误是一样的。大意是要为这个库文件在/usr/lib这个位置建立同步连接。
所以我为两个库文件建立了连接
ln -s /usr/local/lib/ libmad.so.0 /usr/lib/libmad.so.0
ln -s /usr/local/lib/ libid3tag.so.0 /usr/lib/ libid3tag .so.0
然后执行上述播放命令就可以了。

交叉编译时与上述过程相同,但是在配置的时候要做些修改。
1.安装zlib
用交叉编译工具编译zlib,并且把库生成到交叉编译环境的库目录下
./configure –prefix=/usr/local/arm/3.4.1/arm-linux. –prefix是便于寻找头文件和库文件
修改Makefile.
CC=arm-linux-gcc
AR=arm-linux-ar rc
RANLIB=arm-linux-ranlib

make
make install

2.编译libid3tag
./configure CC=arm-linux-gcc –host=arm-linux –disable-debugging -disable-shared –prefix=/usr/local/arm/3.4.1/arm-linux
make
make install
说明:–host指明库运行的环境arm-linux不是ix86-pc-linux.
-disable-shared 编译器默认是动态连接共享库的。这里指明为静态连接(关键)。

3.编译libmad
./configure –enable-fpm=arm –host=arm-linux –disable-shared –disable-debugging –prefix=/usr/local/arm/3.4.1/arm-linux CC=arm-linux-gcc
make
make install

4.编译madplay
./configure –host=arm-linux CC=arm-linux-gcc –disable-debugging –disable-shared
make
make install
完成以后把生成的可执行文件madplay下载到开发板中
执行./madplay filename.mp3就可。

madlife 交叉编译相关推荐

  1. Golang的交叉编译问题

    参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com).也谈Go的可移植性 | Tony Bai 今天准备将一个在Mac上开发 ...

  2. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

  3. TVM交叉编译和远程RPC

    TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...

  4. 用TensorRT针对AArch64用户的交叉编译示例

    用TensorRT针对AArch64用户的交叉编译示例 以下介绍如何在x86_64linux下为AArch64 QNX和Linux平台交叉编译TensorRT示例. 2.1. Prerequisite ...

  5. Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)

    1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...

  6. linux wifi-tools,Linux下WiFi工具wireless_tools交叉编译,及其支持生成iwconfig使用的内核配置...

    内核的配置: General setup  ---> Kernel compression mode (LZMA)  --->LZMA [*] Networking support  -- ...

  7. Cmake 交叉编译

    转载自 http://zhixinliu.com/2016/02/01/2016-02-01-cmake-cross-compile/ CMake交叉编译 CMake的使用,以及如何将一个项目移植到A ...

  8. Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解

    Linux版本:Ubuntu8.04 内核版本:Linux 2.6.24 交叉编译器版本:arm-linux-gcc-3.4.1 交叉编译器下载链接: https://share.weiyun.com ...

  9. Ubuntu上通过android toolchain交叉编译Valgrind操作步骤

    关于Valgrind的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/50196189. 这里介绍下在Ubuntu 16.04上通过 ...

最新文章

  1. python猿辅导_如何用数据分析方法剖析“猿辅导”K12课程
  2. 计算机软件uml,计算机软件——UML旅游管理系统
  3. sybase存储过程修改
  4. 推荐:制作地图的网站和工具
  5. iio Engine logoHTML5 应用框架 iio Engine
  6. postman自动打开_postman---postman自动发博客
  7. H5 File 对象获取 Input type=file 文件详细信息
  8. vb.net写的一个简单计算器(未完善)
  9. XML的写入_dom4j添加、删除、修改Xml文件内容
  10. mysql报错不停止继续执行_mysql 8 启动失败(本地计算机上的mysql服务启动后停止。某些服务再未由其他服务或程序使用时将自动停止)...
  11. html5 摇骰子游戏,html5 canvas掷骰子(简单,学习基础canvas)
  12. 陈臣java_小菜学设计模式——享元模式
  13. 在Windows和macOS上更新Node.js到最新版本
  14. 数学符号:等号上面加一个点≐
  15. 51单片机检测温湿度并且上传到阿里云
  16. java实习经验与总结建议
  17. 新浪微博2012校招笔试题
  18. 【YOLOv3原文+翻译】YOLOv3:An Incremental Improvement
  19. 怪物猎人ol服务器维护,腾讯宣布怪物猎人OL停运 12月31日正式关服
  20. 数据库视图view的解析

热门文章

  1. java取开始时间和结束时间_java获取指定开始时间与结束时间之间的所有日期
  2. 抓包工具 fiddler 的安装和使用详解
  3. 仙侣奇缘3新版登录器界面设定
  4. 计算机仿真如何汇款,【计算机仿真杂志社】计算机仿真杂志社编辑部
  5. AMD在量子隐形传输方面取得突破; 量子隐形传态:从物理量子比特到逻辑编码空间 | 全球量子科技与工业快讯第三十五期
  6. mongodb高可用集群01---单实例、主从模式、一主多从模式
  7. 问题 A: 天天向上
  8. [JavaScript] 小练习 US telephone number validator
  9. ​性能测试基础——性能测试方案(示例)
  10. 广电行业概览(二) 有线电视:有线运营