libmad编译移植到A20
2016-02-02 20:58
211 查看
第一次写博客和大家分享劳动成果,如果写得不好请大家海涵
我用的平台是蜂鸟开发板(全志A20)。
在网上下载的libmad-0.15.1b.tar.gz,百度一搜一大把,我就不提供链接了。
解压后执行:
./configure --host=arm-linux-gnueabihf --prefix=/usr/local/libmad_arm --enable-shared --enable-static --enable-fpm=arm --with-gnu-ld=arm-linux-gnueabihf-ld --build=arm
然后
make
出现错误:
cc1: error: unrecognized command line option “-fforce-mem”
原因是高版本的gcc,已经将-fforce-mem去除了,解决方法:
再执行:
./configure --host=arm-linux-gnueabihf --prefix=/usr/local/libmad_arm --enable-shared --enable-static --enable-fpm=arm --with-gnu-ld=arm-linux-gnueabihf-ld --build=arm
出现错误:
/tmp/ccf2FxyW.s:1299: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'
/tmp/ccf2FxyW.s:1435: Error: selected processor does not support Thumb mode `rsc r8,r8,#0'
/tmp/ccf2FxyW.s:1857: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'
/tmp/ccf2FxyW.s:1996: Error: selected processor does not support Thumb mode `rsc r0,r0,#0
百度一下发现这是libmad的一个bug.
解决方法是:
vim fixed.h
将
# define MAD_F_MLN(hi, lo) \
asm ("rsbs %0, %2, #0\n\t" \
"rsc %1, %3, #0" \
: "=r" (lo), "=r" (hi) \
: "0" (lo), "1" (hi) \
: "cc")
改为
#ifdef __thumb__
/* In Thumb-2, the RSB-immediate instruction is only allowed with a zero
operand. If needed this code can also support Thumb-1
(simply append "s" to the end of the second two instructions). */
# define MAD_F_MLN(hi, lo) \
asm ("rsbs %0, %0, #0\n\t" \
" sbc %1, %1, %1\n\t" \
"sub %1, %1, %2" \
: "+&r" (lo), "=&r" (hi) \
: "r" (hi) \
: "cc")
#else /* ! __thumb__ */
# define MAD_F_MLN(hi, lo) \
asm ("rsbs %0, %2, #0\n\t" \
"rsc %1, %3, #0" \
: "=r" (lo), "=r" (hi) \
: "=&r" (lo), "=r" (hi) \
: "0" (lo), "1" (hi) \
: "cc")
#endif /* __thumb__ */
再make,编译通过了!
然后
make install
编译成功,在/usr/local/libmad_arm下生成了库。
可用jwzhangjie大牛的mp3解码播放程序http://blog.csdn.net/jwzhangjie/article/details/9209807测试,前提是你已经移植了libsalsa哈。我测试时发现打不开"plughw:0,0",然后我改为"default"就OK了。
然后又出现找不到ld-linux-armhf.so.3库,是linux下进行动态库连接的连接器。而我的交叉编译工具下的连接器是ld-2.11.1.so,还有一个是链接ld-linux.so.3,于是我再弄个链接ln
-s ld-2.11.1.so ld-linux-armhf.so.3。编译成功。
将libmad.so.0移植到开发板的/lib, 再弄个链接ln
-s ld-2.11.1.so ld-linux-armhf.so.3。
然后就可用运行mp3解码播放程序了。
我用的平台是蜂鸟开发板(全志A20)。
在网上下载的libmad-0.15.1b.tar.gz,百度一搜一大把,我就不提供链接了。
解压后执行:
./configure --host=arm-linux-gnueabihf --prefix=/usr/local/libmad_arm --enable-shared --enable-static --enable-fpm=arm --with-gnu-ld=arm-linux-gnueabihf-ld --build=arm
然后
make
出现错误:
cc1: error: unrecognized command line option “-fforce-mem”
原因是高版本的gcc,已经将-fforce-mem去除了,解决方法:
sed -i '/-fforce-mem/d' configure
再执行:
./configure --host=arm-linux-gnueabihf --prefix=/usr/local/libmad_arm --enable-shared --enable-static --enable-fpm=arm --with-gnu-ld=arm-linux-gnueabihf-ld --build=arm
出现错误:
/tmp/ccf2FxyW.s:1299: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'
/tmp/ccf2FxyW.s:1435: Error: selected processor does not support Thumb mode `rsc r8,r8,#0'
/tmp/ccf2FxyW.s:1857: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'
/tmp/ccf2FxyW.s:1996: Error: selected processor does not support Thumb mode `rsc r0,r0,#0
百度一下发现这是libmad的一个bug.
解决方法是:
vim fixed.h
将
# define MAD_F_MLN(hi, lo) \
asm ("rsbs %0, %2, #0\n\t" \
"rsc %1, %3, #0" \
: "=r" (lo), "=r" (hi) \
: "0" (lo), "1" (hi) \
: "cc")
改为
#ifdef __thumb__
/* In Thumb-2, the RSB-immediate instruction is only allowed with a zero
operand. If needed this code can also support Thumb-1
(simply append "s" to the end of the second two instructions). */
# define MAD_F_MLN(hi, lo) \
asm ("rsbs %0, %0, #0\n\t" \
" sbc %1, %1, %1\n\t" \
"sub %1, %1, %2" \
: "+&r" (lo), "=&r" (hi) \
: "r" (hi) \
: "cc")
#else /* ! __thumb__ */
# define MAD_F_MLN(hi, lo) \
asm ("rsbs %0, %2, #0\n\t" \
"rsc %1, %3, #0" \
: "=r" (lo), "=r" (hi) \
: "=&r" (lo), "=r" (hi) \
: "0" (lo), "1" (hi) \
: "cc")
#endif /* __thumb__ */
再make,编译通过了!
然后
make install
编译成功,在/usr/local/libmad_arm下生成了库。
可用jwzhangjie大牛的mp3解码播放程序http://blog.csdn.net/jwzhangjie/article/details/9209807测试,前提是你已经移植了libsalsa哈。我测试时发现打不开"plughw:0,0",然后我改为"default"就OK了。
然后又出现找不到ld-linux-armhf.so.3库,是linux下进行动态库连接的连接器。而我的交叉编译工具下的连接器是ld-2.11.1.so,还有一个是链接ld-linux.so.3,于是我再弄个链接ln
-s ld-2.11.1.so ld-linux-armhf.so.3。编译成功。
将libmad.so.0移植到开发板的/lib, 再弄个链接ln
-s ld-2.11.1.so ld-linux-armhf.so.3。
然后就可用运行mp3解码播放程序了。
相关文章推荐
- Maven主要插件汇总
- Leetcode_num3_Same Tree
- python程序编译成exe文件
- 弱语言变量作用域
- java.io.Serializable
- Gridpanel符合条件的行有颜色
- JDBC获得数据库连接时写在URL上的?useUnicode=true&characterEncoding=utf-8的意义
- 【poj2891-Strange Way to Express Integers】拓展欧几里得-同余方程组
- HYSBZ/BZOJ 1005 [HNOI2008] 明明的烦恼 - Prufer编码&组合数学&高精度 此乃神题!
- HDOJ 1217 Arbitrage (最短路 Floyd)
- 并查集 路径压缩
- 关于解决ubuntu中Docky软件断电自动关闭的问题(Linux: Docky Closes After Waking Up From Suspend (Ubuntu 14.04))
- 结对编程的正确姿势,你会了吗?
- 微信关闭了QQ好友导入功能
- 机房数据关系图
- ubuntu下apache2 安装 配置 卸载 CGI设置 SSL设置
- 一起talk C栗子吧(第一百一十九回:C语言实例--线程死锁三)
- Maven够用就好
- [土狗之路]coursera 与 oj上的递归练习作业-- 单词翻转 角谷猜想
- 桥接模式