MIPS安装这个libmad库就是个坑,不由感慨一句,网上大神还是多。致敬大神的同时,这个方法不能让他淹没下去,我是在犄角旮旯里找到的他。
#tar -zxvf libmad-0.15.1b.tar.gz
#cd libmad-0.15.1b
如果此时直接make,就会出现一系列问题。
#./configure --host=mipsel-linux
--prefix=/opt/libmad-mipsel
--enable-fpm=mips
然后make,就会出现第一个报错
Makefile:383:recipe for target 'version.lo' failed
make[2]:*** [version.lo] Error 1
………………
原因不说了,网上多的很,解决方法有两种:
方法一:
修改Makefile
#gedit Makefile
找到-fforce-mem,这个字符串,删除保存
方法二:
在./configure之前,先输入
#sed -i '/-fforce-mem' configure
结果都是一样的,只要不出现这个字符串。
解决了这个问题,我们重新./configure,并make,会出现新的问题。
大致报错是这样的
synth.c:………………in expansion of macro 'MAD_F_MLX'
fixed.h:………………impossible constraint in 'asm'
………………
Makefile:383:receipe for target 'synth.lo' failed
make[2]:***[synth.lo] Error 1
………………………………
这个问题只出现在MIPS的编译器上,需要修改libmad文件下的两个头文件的代码。
2.1 修改第一个头文件:fixed.h
#gedit fixed.h
Ctrl+F,搜索关键字“MIPS”,有两处修改内容。
找到相关内容,第一处修改内容
#elif defined(FPM_MIPS) //找到这一段命令,原来就有,在这回车,在下面添加命令
//以下为添加的内容
/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */
#if defined (__GNUC__) && defined (__GNUC_MINOR__)
#define __GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
#else
#define __GNUC_PREREQ(maj, min) 0
#endif
#if __GNUC_PREREQ(4,4)
typedef unsigned int u64_di_t __attribute__ ((mode (DI)));
# define MAD_F_MLX(hi, lo, x, y) \
do { \
u64_di_t __ll = (u64_di_t) (x) * (y); \
hi = __ll >> 32; \
lo = __ll; \
} while (0)
#else
//以上内容在此添加
第二处添加内容,紧挨着往下翻,找到这条
if defined(OPT_SPEED)命令,在此条命令,上面添加
#endif //原有内容
#endif /* __GNU_PREREQ(4,4) */ //添加内容
#if defined(OPT_SPEED) //原有内容
保存修改,关闭
2.2 修改第二个头文件:mad.h
然后是修改第二个头文件,有两处修改内容
mad.h
同样,Ctrl+F,搜索“MIPS”,找到#elif defined(FPM_MIPS)
# elif defined(FPM_MIPS) //在下面添加内容
//以下为添加的内容
/* Test for gcc >= maj.min, as per __GNUC_PREREQ in glibc */
#if defined (__GNUC__) && defined (__GNUC_MINOR__)
#define __GNUC_PREREQ(maj, min) \
((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min))
#else
#define __GNUC_PREREQ(maj, min) 0
#endif
#if __GNUC_PREREQ(4,4)
typedef unsigned int u64_di_t __attribute__ ((mode (DI)));
# define MAD_F_MLX(hi, lo, x, y) \
do { \
u64_di_t __ll = (u64_di_t) (x) * (y); \
hi = __ll >> 32; \
lo = __ll; \
} while (0)
#else
//以上为添加的内容
然后是第二处修改,紧挨着往下翻,找到if defined(OPT_SPEED)命令,在此条命令,上面添加。
#endif //原有内容
#endif /* __GNU_PREREQ(4,4) */ //添加内容
#if defined(OPT_SPEED) //原有内容
保存后关闭。
至此,问题解决了。
重新配置,make,make install。成功。