madlife 交叉编译
如何在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 交叉编译相关推荐
- Golang的交叉编译问题
参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com).也谈Go的可移植性 | Tony Bai 今天准备将一个在Mac上开发 ...
- Linux 交叉编译简介
Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...
- TVM交叉编译和远程RPC
TVM交叉编译和远程RPC 本文介绍了TVM中使用RPC的交叉编译和远程设备执行. 使用交叉编译和RPC,可以在本地计算机上编译程序,然后在远程设备上运行它.当远程设备资源受到限制时(如Raspber ...
- 用TensorRT针对AArch64用户的交叉编译示例
用TensorRT针对AArch64用户的交叉编译示例 以下介绍如何在x86_64linux下为AArch64 QNX和Linux平台交叉编译TensorRT示例. 2.1. Prerequisite ...
- Go 学习笔记(37)— 标准命令(go build 跨平台编译、交叉编译、go clean、go run、go fmt、go install、go get)
1. 标准命令简述 Go 本身包含来大量用于处理 Go 程序的命令和工具. 命令 作用 build 用于编译指定的代码包或 Go 语言源码文件.命令源码文件会被编译成可执行文件,并存放到命令执行的目录 ...
- linux wifi-tools,Linux下WiFi工具wireless_tools交叉编译,及其支持生成iwconfig使用的内核配置...
内核的配置: General setup ---> Kernel compression mode (LZMA) --->LZMA [*] Networking support -- ...
- Cmake 交叉编译
转载自 http://zhixinliu.com/2016/02/01/2016-02-01-cmake-cross-compile/ CMake交叉编译 CMake的使用,以及如何将一个项目移植到A ...
- Ubuntu 8.04嵌入式交叉编译环境arm-linux-gcc搭建过程图解
Linux版本:Ubuntu8.04 内核版本:Linux 2.6.24 交叉编译器版本:arm-linux-gcc-3.4.1 交叉编译器下载链接: https://share.weiyun.com ...
- Ubuntu上通过android toolchain交叉编译Valgrind操作步骤
关于Valgrind的介绍可以参考:https://blog.csdn.net/fengbingchun/article/details/50196189. 这里介绍下在Ubuntu 16.04上通过 ...
最新文章
- python猿辅导_如何用数据分析方法剖析“猿辅导”K12课程
- 计算机软件uml,计算机软件——UML旅游管理系统
- sybase存储过程修改
- 推荐:制作地图的网站和工具
- iio Engine logoHTML5 应用框架 iio Engine
- postman自动打开_postman---postman自动发博客
- H5 File 对象获取 Input type=file 文件详细信息
- vb.net写的一个简单计算器(未完善)
- XML的写入_dom4j添加、删除、修改Xml文件内容
- mysql报错不停止继续执行_mysql 8 启动失败(本地计算机上的mysql服务启动后停止。某些服务再未由其他服务或程序使用时将自动停止)...
- html5 摇骰子游戏,html5 canvas掷骰子(简单,学习基础canvas)
- 陈臣java_小菜学设计模式——享元模式
- 在Windows和macOS上更新Node.js到最新版本
- 数学符号:等号上面加一个点≐
- 51单片机检测温湿度并且上传到阿里云
- java实习经验与总结建议
- 新浪微博2012校招笔试题
- 【YOLOv3原文+翻译】YOLOv3:An Incremental Improvement
- 怪物猎人ol服务器维护,腾讯宣布怪物猎人OL停运 12月31日正式关服
- 数据库视图view的解析
热门文章
- java取开始时间和结束时间_java获取指定开始时间与结束时间之间的所有日期
- 抓包工具 fiddler 的安装和使用详解
- 仙侣奇缘3新版登录器界面设定
- 计算机仿真如何汇款,【计算机仿真杂志社】计算机仿真杂志社编辑部
- AMD在量子隐形传输方面取得突破; 量子隐形传态:从物理量子比特到逻辑编码空间 | 全球量子科技与工业快讯第三十五期
- mongodb高可用集群01---单实例、主从模式、一主多从模式
- 问题 A: 天天向上
- [JavaScript] 小练习 US telephone number validator
- ​性能测试基础——性能测试方案(示例)
- 广电行业概览(二) 有线电视:有线运营