我根据网上的安装步骤,基本都可以完成到最后一步,但是当我进行音乐播放的时候(即直接输入madplay的时候),出现了:
error while loading shared libraries: libnet.so.1:cannot open shared object file :No such file or directory”的错误提示。
解决办法是:输入ldconfig
输入madplay后,后面出现如图所示
资源提供:
MP3:https://pan.baidu.com/s/1vedZFXVetlTS3rS8-eBEtA 提取密码:sy92
Madplay安装包集合:https://pan.baidu.com/s/1UdFApAzUa8sT9e7vbEYnhA 提取密码:1tvt
此安装包也适用于Redhat。
播放音乐:输入 madplay -o wav:- test.mp3 | aplay
----------------------------------------------------------------------------------
一、问题出现的原因
原因是Linux下的共享库路径配置不正确。默认的linux共享库搜索路径为/lib和/usr/lib两个目录(不包含子目录),若共享库不在这两个路径(最典型的就是/usr/local/lib),不能被自动动态链接到,解决方法有四种:
1,链接时使用静态库(.a文件)。在g++命令上写入改.a文件的完整路径。
2,修改LD_LIBRARY_PATH环境变量。(临时有效,且有时候没有效果)
3,将库文件复制到可以搜索到的路径里面,这样比较狠,但是可能导致一些后即问题。
4,添加搜索路径,使用ldconfig命令(下面详细介绍)。
ldconfig几个需要注意的地方
往/lib和/usr/lib里面加东西,是不用修改/etc/ld.so.conf的,但是完了之后要调一下ldconfig,不然这个library会找不到
想往上面两个目录以外加东西的时候,一定要修改/etc/ld.so.conf,然后再调用ldconfig,不然也会找不到
比如安装了一个mysql到/usr/local/mysql,mysql有一大堆library在 /usr/local/mysql/lib下面,这时就需要在/etc/ld.so.conf下面加一行/usr/local/mysql/lib,保存 过后ldconfig一下,新的library才能在程序运行时被找到。
如果想在这两个目录以外放lib,但是又不想在/etc/ld.so.conf中加东西(或者是没有权限加东西)。那也可以,就是export一个全局变 量LD_LIBRARY_PATH,然后运行程序的时候就会去这个目录中找library。一般来讲这只是一种临时的解决方案,在没有权限或临时需要的时 候使用。
ldconfig做的这些东西都与运行程序时有关,跟编译时一点关系都没有。编译的时候还是该加-L就得加,不要混淆了。
总之,就是不管做了什么关于library的变动后,最好都ldconfig一下,不然会出现一些意想不到的结果。不会花太多的时间,但是会省很多的事。
参考于:https://blog.csdn.net/yanxiangtianji/article/details/8316562
二、安装步骤
安装步骤:(可参考)详细步骤可查看
https://blog.csdn.net/qq_15000103/article/details/76796514
1.准备
需要准备的库文件有zlib-1.1.4.tar.gz,libid3tag-0.15.1b.tar.gz,libmad-0.15.1b.tar.gz,madplay-0.15.2b.tar.gz。
zlib-1.1.4.tar.tar用于文件的压缩和解压
libid3tag-0.15.1b.tar.gz mp3的解码库
libmad-0.15.1b.tar.gz madplay的库文件
madplay-0.15.2b.tar.gz 播放程序的压缩包,mp3播放器的源码。
注意:查看是否安装了gcc和g++:
#whereis gcc
#whereis g++
如果没有安装,则需要在root下安装编译器:
#yum install gcc
#yum install gcc-c++
2.解压
1)建立存放的目标目录:
建立MP3目录 mkdir /mp3
例如:# mkdir /home/admin/mp3
2)分别解压上面几个文件
tar -xzvf /文件目录/文件名.tar.gz -C /目标目录/
例如:
# tar -xzvf /home/admin/Desktop/zlib-1.1.4.tar.gz -C /home/admin/mp3/
# tar -xzvf /home/admin/Desktop/libid3tag-0.15.1b.tar.gz -C /home/admin/mp3/
# tar -xzvf /home/admin/Desktop/libmad-0.15.1b.tar.gz -C /home/admin/mp3/
# tar -xzvf /home/admin/Desktop/madplay-0.15.2b.tar.gz -C /home/admin/mp3/
3.编译zlib
1)回到zlib解压的路径下
例如:# cd /home/admin/mp3/zlib-1.1.4/
2)执行以下命令:
a.生成Makefile
./configure
b.make生成libz.a库
make
c.再把生成的库安装到系统中,在/usr/local/lib中
make install
4.编译libid3tag
1)回到libid3tag解压的路径下
例如:
cd /home/admin/mp3/libid3tag-0.15.1b/
2)执行以下命令:
a.生成Makefile
./configure
b.make生成libz.a库
make
c.再把生成的库安装到系统中,在/usr/local/lib中
make install
5.编译libmad
1)回到libmad解压的路径下
例如:
cd /home/admin/mp3/libmad-0.15.1b/
2)执行以下命令:
a.生成Makefile
./configure
b.make生成libz.a库
make
c.再把生成的库安装到系统中,在/usr/local/lib中
make install
注意:在执行命令:# make时出错
error: unrecognized command line option “-fforce-mem”
原因是:gcc 3.4 或者更高版本,已经将其去除了,所以会出现上面的错误。
解决方式是:找到libmad configure之后的Makefile,找到包含"-fforce-mem"字符串,将其删除,就可以了。
如果删除字符串后无法保存,可另存为其他名字,删了目录下的Makefile,再把另存为的文件重命名。
6.编译madplay
1)回到madplay解压的路径下
例如:
cd /home/admin/mp3/madplay-0.15.2b/
2)执行以下命令:
a.生成Makefile
./configure
b.make生成libz.a库
make
c.再把生成的库安装到系统中,在/usr/local/lib中
make install