技术标签: libmad zlib libid3ta linux 交叉编译 嵌入式、MP3解码 移植 嵌入式
搞了几天的libmad,终于安装完成了。本来打算利用libmad写一个嵌入式linux的MP3音乐播放器,于是乎去网上看了很多教程和资料,本以为按着上面的方法就可以顺利完成的,但是谁知一下就搞了好几天。细细想来究其原因大概有两个:一个是技术发展太快,很多资料已经过时了;另一个就是网上的资料都是盲目转载大同小异,并没有太多的营养,牵扯到许多细节问题都忽略而过。所以为了给更多的人提供方便,我就写这篇文章,算是一个经验的总结吧。不说废话,开始正题。
!!!文章中的注意事项一定要认真看。!!!
zlib-1.2.3.tar.gz
libid3tag-0.15.1b.tar.gz
libmad-0.15.1b.tar.gz
注意:软件版本要与这里写的一致,否则会导致不必要的麻烦,这也是我遇到过的。
gcc 版本5.4.0
arm-linux-gcc 版本4.3.2
Ubuntu 版本16
我的软件压缩包放在/home文件夹里面。
安装位置是:PC下的库:/usr/local/lib/mad_x86,ARM下的库/usr/local/lib/mad_arm,当然其他地方也可以。
所以,先在/usr/local/lib/下创建两个文件夹mad_x86和mad_arm。
注意:安装前,一定要切换到root权限下,不然会有很多麻烦。
ubuntu下切换root的方法自行百度。
# tar -zxvf zlib-1.2.3.tar.gz
# tar -zxvf libid3tag-0.15.1b.tar.gz
# tar -zxvf libmad-0.15.1b.tar.gz
#cd zlib-1.2.3
# ./configure --prefix=/usr/local/lib/mad_x86
# make
# make install
# cd libid3tag-0.15.1b
# ./configure--prefix=/opt/madplay/target-arm --disable-debugging --disable-shared --enable-staticCPPFLAGS=-I/usr/local/lib/mad_x86/include LDFLAGS=-L/usr/local/lib/mad_x86/lib
# make
# make install
# cd libmad-0.15.1b
# ./configure --prefix=/usr/local/lib/mad_x86--disable-debugging --disable-shared --enable-static CPPFLAGS=-I/usr/local/lib/mad_x86/includeLDFLAGS=-L/usr/local/lib/mad_x86/lib
# make
# make install
注意:这里又些地方与PC下的不同,要注意。
# tar -zxvf zlib-1.2.3.tar.gz
# tar -zxvf libid3tag-0.15.1b.tar.gz
# tar -zxvf libmad-0.15.1b.tar.gz
#cd zlib-1.2.3
# ./configure --prefix=/usr/local/lib/mad_x86
打开zlib-1.2.3目录下的Makefile文件,按以下内容修改并保存:
CC=arm-linux-gcc
AR=arm-linux-ar
RANLIB=arm-linux-ranlib(如果你使用的不是zlib-1.2.3版本的,这里的设置可能不一样,如zlib-1.2.11。所以建议版本一致)
# make
# make install
# cd libid3tag-0.15.1b
# ./configure –host=arm-linux --prefix=/opt/madplay/target-arm--disable-debugging --disable-shared --enable-static CPPFLAGS=-I/usr/local/lib/mad_arm/includeLDFLAGS=-L/usr/local/lib/mad_arm/lib
# make
# make install
# cd libmad-0.15.1b
# ./configure--host=arm-linux --prefix=/usr/local/lib/mad_x86 --disable-debugging--disable-shared --enable-static CPPFLAGS=-I/usr/local/lib/mad_arm/includeLDFLAGS=-L/usr/local/lib/mad_arm/lib
# make
# make install
效果 (源码网盘地址在最后)源码index.html<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"&
接触批处理有一段时间了,总感觉 windows 批处理是有一定的用处的。尤其是当你需要在 windows 系统中做些批量有规律的事情 、或者一些固定的命令行操作。你完全可以编辑一个批处理文件,将一系列烦人的命令化的操作变成简单的一次“双击”。这可能就是批处理的魅力之一吧~~ 以下是一些批处理的简单应用,但是批出理能实现的功能远远不止这些!1.新建一个空的文本文档如果
There are n sticks, the i-th of which has length ai. Alex wants to assemble from them as many parallelograms as possible simultaneously, with each stick used at most in one parallelogram. What maximal...
记得在前几年发布过我还是一个小程序员的时候,发布过“我的一天”生活记录。现在回想一起来,感觉我的工作方式变化了很多。很多人都问我,一天你写多少代码?我说:现在的我,一天平均下来只能写10行新代码,现在多是代码的维护。
CSDN用了一年多了,博客园注册了好久,但是都没使用过。从今天开始,该账号下的文章会迁移到博客园,以后发表文章也只发表在博客园上附上博客园链接:我的博客园...
1 hutool:http://www.hutool.cn/用过其中的Double的运算,主要解决为空时候返回0 2 JRebel热部署工具,适用于单个工程的项目CTR+f9就可以重新加载更新的类http://manuals.zeroturnaround.com/jrebel/3 Freemarker用模板生成word或者excel 4 mapstruc...
[email protected]_ 是函数传参时放置参数的数组,可以从中取实参,比如 my($para1,$para2...)[email protected]_, 函数调用时填了几个参数,便可以从该数组中取到几个参数。2.$_ 是默认参数的意思,指的是在不指定的情况下,程序处理的上一个变量,比如open(IN,"<file.txt")while(){ print $_;}close(IN);这个例子是打开一个文本文件,读取每一行
在项目中会经常用到读取一些配置数据,这些数据根据实际需要有可能会调整,如果将这些数据直接嵌入进代码中会非常不便,需要经常调整代码。将这些数据写入配置文件中然后在读入,如果需要调整,只需修改配置文件,code不用作任何改动,这样会非常方便。最常用到的读取配置文件的方式是使用istream类。std::istream: input stream. Input stream objects can ...
在 Jetpack Compose 动态申请权限可以使用两种方法rememberLancherForActivityResultAccompanist 的 Permissions接下来分贝展示一下两种用法代码环境如下:Kotlin 1.5.2Jetpack Compose 1.0.2Android Studio Chipmunk | 2021.2.1要使用 Accompanist 需要额外引入dependencies { ... implementation "co
在mac哪里安装studio之后第一次运行都在fetch东西。。然后下面网址是教你如何取消它做这一步。http://jingyan.baidu.com/article/fdffd1f8246044f3e98ca1e2.html
spikingjelly的最新版本,我当时使用的是20210330,中间存在onnx的包调用错误,难以解决。通过调试20201221,发现这个版本的是好使的,但是也有一些是需要调试的。1.首先应该训练出一个ANN模型出来,此时main函数中应该不填入任何信息,即if __name__ == '__main__': main() # main('./log-cnn_mnist1622169436.7251258')2.当训练出ANN模型后,会自动生成一个文件夹如./log-cnn