LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1052|回复: 7

MPD添加歌曲出错(已解决,但对Portage的包管理机制迷惑了(不迷惑了,谢版主解答))

[复制链接]
发表于 2008-7-15 22:26:06 | 显示全部楼层 |阅读模式
本来用MPD+MPC听歌听的好好的,下了几首新歌,放进歌曲所在文件夹里,然后用mpd --create-db,却发现MPD出错了,清空MPD的database,再次运行,依然出错,这次连原来的歌曲都添加不进去了,用Audacious打开新下载的歌曲没问题,说明不是歌的问题。出错信息:

  1. # mpd --create-db
  2. *** glibc detected *** mpd: free(): invalid pointer: 0x000000000067fe50 ***
  3. ======= Backtrace: =========
  4. /lib/libc.so.6[0x7fd4b170019d]
  5. /lib/libc.so.6(cfree+0x76)[0x7fd4b1701be6]
  6. mpd[0x42595b]
  7. mpd[0x425b31]
  8. mpd[0x425c5c]
  9. mpd[0x425dbc]
  10. mpd[0x40c82b]
  11. mpd[0x424bae]
  12. mpd[0x424c93]
  13. mpd[0x414ca7]
  14. mpd[0x414ddb]
  15. mpd[0x414b5b]
  16. mpd[0x414bef]
  17. mpd[0x414ddb]
  18. mpd[0x414e6c]
  19. mpd[0x41d38d]
  20. /lib/libc.so.6(__libc_start_main+0xf4)[0x7fd4b16ad4a4]
  21. mpd[0x407c09]
  22. ======= Memory map: ========
  23. 00400000-0043a000 r-xp 00000000 08:02 689038                             /usr/bin/mpd
  24. 0063a000-0063b000 r--p 0003a000 08:02 689038                             /usr/bin/mpd
  25. 0063b000-0063d000 rw-p 0003b000 08:02 689038                             /usr/bin/mpd
  26. 0063d000-00685000 rw-p 0063d000 00:00 0                                  [heap]
  27. 7fd4abdea000-7fd4abdff000 r-xp 00000000 08:02 741835                     /lib64/libgcc_s.so.1
  28. 7fd4abdff000-7fd4abffe000 ---p 00015000 08:02 741835                     /lib64/libgcc_s.so.1
  29. 7fd4abffe000-7fd4abfff000 r--p 00014000 08:02 741835                     /lib64/libgcc_s.so.1
  30. 7fd4abfff000-7fd4ac000000 rw-p 00015000 08:02 741835                     /lib64/libgcc_s.so.1
  31. 7fd4ac000000-7fd4ac021000 rw-p 7fd4ac000000 00:00 0
  32. 7fd4ac021000-7fd4b0000000 ---p 7fd4ac021000 00:00 0
  33. 7fd4b01e9000-7fd4b0204000 r-xp 00000000 08:02 245429                     /usr/lib64/gconv/GBK.so
  34. 7fd4b0204000-7fd4b0403000 ---p 0001b000 08:02 245429                     /usr/lib64/gconv/GBK.so
  35. 7fd4b0403000-7fd4b0404000 r--p 0001a000 08:02 245429                     /usr/lib64/gconv/GBK.so
  36. 7fd4b0404000-7fd4b0405000 rw-p 0001b000 08:02 245429                     /usr/lib64/gconv/GBK.so
  37. 7fd4b0405000-7fd4b040f000 r-xp 00000000 08:02 245655                     /lib64/libnss_files-2.8.so
  38. 7fd4b040f000-7fd4b060e000 ---p 0000a000 08:02 245655                     /lib64/libnss_files-2.8.so
  39. 7fd4b060e000-7fd4b060f000 r--p 00009000 08:02 245655                     /lib64/libnss_files-2.8.so
  40. 7fd4b060f000-7fd4b0610000 rw-p 0000a000 08:02 245655                     /lib64/libnss_files-2.8.so
  41. 7fd4b0610000-7fd4b0619000 r-xp 00000000 08:02 245621                     /lib64/libnss_nis-2.8.so
  42. 7fd4b0619000-7fd4b0819000 ---p 00009000 08:02 245621                     /lib64/libnss_nis-2.8.so
  43. 7fd4b0819000-7fd4b081a000 r--p 00009000 08:02 245621                     /lib64/libnss_nis-2.8.so
  44. 7fd4b081a000-7fd4b081b000 rw-p 0000a000 08:02 245621                     /lib64/libnss_nis-2.8.so
  45. 7fd4b081b000-7fd4b082f000 r-xp 00000000 08:02 245620                     /lib64/libnsl-2.8.so
  46. 7fd4b082f000-7fd4b0a2e000 ---p 00014000 08:02 245620                     /lib64/libnsl-2.8.so
  47. 7fd4b0a2e000-7fd4b0a2f000 r--p 00013000 08:02 245620                     /lib64/libnsl-2.8.so
  48. 7fd4b0a2f000-7fd4b0a30000 rw-p 00014000 08:02 245620                     /lib64/libnsl-2.8.so
  49. 7fd4b0a30000-7fd4b0a32000 rw-p 7fd4b0a30000 00:00 0
  50. 7fd4b0a32000-7fd4b0a39000 r-xp 00000000 08:02 245560                     /lib64/libnss_compat-2.8.so
  51. 7fd4b0a39000-7fd4b0c38000 ---p 00007000 08:02 245560                     /lib64/libnss_compat-2.8.so
  52. 7fd4b0c38000-7fd4b0c39000 r--p 00006000 08:02 245560                     /lib64/libnss_compat-2.8.so
  53. 7fd4b0c39000-7fd4b0c3a000 rw-p 00007000 08:02 245560                     /lib64/libnss_compat-2.8.so
  54. 7fd4b0c3a000-7fd4b0c3f000 r-xp 00000000 08:02 588414                     /usr/lib64/libogg.so.0.5.3
  55. 7fd4b0c3f000-7fd4b0e3e000 ---p 00005000 08:02 588414                     /usr/lib64/libogg.so.0.5.3
  56. 7fd4b0e3e000-7fd4b0e3f000 r--p 00004000 08:02 588414                     /usr/lib64/libogg.so.0.5.3
  57. 7fd4b0e3f000-7fd4b0e40000 rw-p 00005000 08:02 588414                     /usr/lib64/libogg.so.0.5.3
  58. 7fd4b0e40000-7fd4b0e5f000 r-xp 00000000 08:02 666435                     /usr/lib64/libvorbis.so.0.4.1
  59. 7fd4b0e5f000-7fd4b105e000 ---p 0001f000 08:02 666435                     /usr/lib64/libvorbis.so.0.4.1
  60. 7fd4b105e000-7fd4b105f000 r--p 0001e000 08:02 666435                     /usr/lib64/libvorbis.so.0.4.1
  61. 7fd4b105f000-7fd4b106d000 rw-p 0001f000 08:02 666435                     /usr/lib64/libvorbis.so.0.4.1
  62. 7fd4b106d000-7fd4b1081000 r-xp 00000000 08:02 55                         /lib64/libz.so.1.2.3
  63. 7fd4b1081000-7fd4b1280000 ---p 00014000 08:02 55                         /lib64/libz.so.1.2.3
  64. 7fd4b1280000-7fd4b1281000 r--p 00013000 08:02 55                         /lib64/libz.so.1.2.3
  65. 7fd4b1281000-7fd4b1282000 rw-p 00014000 08:02 55                         /lib64/libz.so.1.2.3
  66. 7fd4b1282000-7fd4b1289000 r-xp 00000000 08:02 245632                     /lib64/librt-2.8.so
  67. 7fd4b1289000-7fd4b1489000 ---p 00007000 08:02 245632                     /lib64/librt-2.8.so
  68. 7fd4b1489000-7fd4b148a000 r--p 00007000 08:02 245632                     /lib64/librt-2.8.so
  69. 7fd4b148a000-7fd4b148b000 rw-p 00008000 08:02 245632                     /lib64/librt-2.8.so
  70. 7fd4b148b000-7fd4b148d000 r-xp 00000000 08:02 245615                     /lib64/libdl-2.8.so
  71. 7fd4b148d000-7fd4b168d000 ---p 00002000 08:02 245615                     /lib64/libdl-2.8.so
  72. 7fd4b168d000-7fd4b168e000 r--p 00002000 08:02 245615                     /lib64/libdl-2.8.so
  73. 7fd4b168e000-7fd4b168f000 rw-p 00003000 08:02 245615                     /lib64/libdl-2.8.so
  74. 7fd4b168f000-7fd4b17ce000 r-xp 00000000 08:02 245550                     /lib64/libc-2.8.so
  75. 7fd4b17ce000-7fd4b19cd000 ---p 0013f000 08:02 245550                     /lib64/libc-2.8.so
  76. 7fd4b19cd000-7fd4b19d1000 r--p 0013e000 08:02 245550                     /lib64/libc-2.8.so
  77. 7fd4b19d1000-7fd4b19d2000 rw-p 00142000 08:02 245550                     /lib64/libc-2.8.so
  78. 7fd4b19d2000-7fd4b19d7000 rw-p 7fd4b19d2000 00:00 0
  79. 7fd4b19d7000-7fd4b1a57000 r-xp 00000000 08:02 245603                     /lib64/libm-2.8.so
  80. 7fd4b1a57000-7fd4b1c56000 ---p 00080000 08:02 245603                     /lib64/libm-2.8.so
  81. 7fd4b1c56000-7fd4b1c57000 r--p 0007f000 08:02 245603                     /lib64/libm-2.8.so
  82. 7fd4b1c57000-7fd4b1c58000 rw-p 00080000 08:02 245603                     /lib64/libm-2.8.so
  83. 7fd4b1c58000-7fd4b1c7d000 r-xp 00000000 08:02 484612                     /usr/lib64/libaudiofile.so.0.0.2
  84. 7fd4b1c7d000-7fd4b1e7d000 ---p 00025000 08:02 484612                     /usr/lib64/libaudiofile.so.0.0.2
  85. 7fd4b1e7d000-7fd4b1e80000 r--p 00025000 08:02 484612                     /usr/lib64/libaudiofile.so.0.0.2
  86. 7fd4b1e80000-7fd4b1e81000 rw-p 00028000 08:02 484612                     /usr/lib64/libaudiofile.so.0.0.2
  87. 7fd4b1e81000-7fd4b1ebc000 r-xp 00000000 08:02 688463                     /usr/lib64/libmikmod.so.2.0.4
  88. 7fd4b1ebc000-7fd4b20bc000 ---p 0003b000 08:02 688463                     /usr/lib64/libmikmod.so.2.0.4
  89. 7fd4b20bc000-7fd4b20bd000 r--p 0003b000 08:02 688463                     /usr/lib64/libmikmod.so.2.0.4
  90. 7fd4b20bd000-7fd4b20bf000 rw-p 0003c000 08:02 688463                     /usr/lib64/libmikmod.so.2.0.4
  91. 7fd4b20bf000-7fd4b20c0000 rw-p 7fd4b20bf000 00:00 0
  92. 7fd4b20c0000-7fd4b20f7000 r-xp 00000000 08:02 668263                     /usr/lib64/libFLAC.so.8.2.0
  93. 7fd4b20f7000-7fd4b22f7000 ---p 00037000 08:02 668263                     /usr/lib64/libFLAC.so.8.2.0
  94. 7fd4b22f7000-7fd4b22f8000 r--p 00037000 08:02 668263                     /usr/lib64/libFLAC.so.8.2.0
  95. 7fd4b22f8000-7fd4b22f9000 rw-p 00038000 08:02 668263                     /usr/lib64/libFLAC.so.8.2.0
  96. 7fd4b22f9000-7fd4b2300000 r-xp 00000000 08:02 665660                     /usr/lib64/libvorbisfile.so.3.3.0
  97. 7fd4b2300000-7fd4b24ff000 ---p 00007000 08:02 665660                     /usr/lib64/libvorbisfile.so.3.3.0
  98. 7fd4b24ff000-7fd4b2500000 r--p 00006000 08:已放弃
复制代码

这是咋整的?
发表于 2008-7-15 22:54:40 | 显示全部楼层
把mpd依赖的库全部重新编译一遍
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-16 00:17:25 | 显示全部楼层
多谢版主帮助,问题已解决。
先查询mpd的依赖库,然后全部emerge -av,这时候发现居然有三个包需要新安装:
dev-lang/ghc-6.8.2
dev-haskell/cabal-1.2.3.0
dev-haskell/iconv-0.4
这时候发现ghc这个包居然有38MB之大,查了一下,似乎是Haskell的编译器,应该是iconv所依赖的,想想自己应该用不到这个东西,于是去掉iconv这个包再emerge,发现mpd仍然有问题,但又实在不想为个mpd去安装什么Haskell编译器,于是去掉了mpd的iconv这个USE标记重新编译mpd,结果现在使用正常了。
(现在又想想,觉得这个问题的解决有点巧合……当时我手动emerge所有mpd依赖的包的时候,把libiconv看错了,写成emerge iconv了,所以才发现这个问题,如果当时没看错写的是emerge libiconv的话,估计现在依然没有解决……汗一个……)


不知iconv这个标记到底有何用处?equery显示:
iconv         : Enable support for the iconv character set conversion library
看起来似乎和文件编码有关,可是我现在不加这个标记依然能添加、播放、显示中文歌曲啊。

而且现在对PORTAGE的虚拟包有点迷惑了:

经过查看mpd的Ebuild知道:
DEPEND="iconv? ( virtual/libiconv )"           (这里我只写了这一行)
libiconv是个虚拟包,emerge信息显示我系统中已经安装了这个虚拟包,却没有安装iconv这个实实在在的程序包,所以对mpd出错这个问题我的理解是:mpd有时候要调用iconv库,而系统中只安装了libiconv这个虚拟包,但因为并没有安装相应的实际程序,所以在调用的时候就会挂掉。但这是为什么呢?以前对虚拟包的理解是:虚拟包就是像gnome这样的名称,实际上是一个或多个实体包的合称,我们emerge gnome就相当于同时emerge了所有这些包。但这个libiconv让我觉得自己原来的理解似乎不对,似乎可以只安装虚拟包,只挂个名字而不装实际的程序?那岂不是还会遇到很多像mpd这样的莫名其妙的错误?
再次查询了一下:
  1. # equery d libiconv
  2. [ Searching for packages depending on libiconv... ]
  3. dev-libs/glib-2.16.4 (virtual/libiconv)
  4. media-sound/mpd-0.14.0_pre20080630 (iconv? virtual/libiconv)
  5. media-video/mplayer-1.0_rc2_p26753-r1 (iconv? virtual/libiconv)
  6. net-fs/samba-3.0.30 (virtual/libiconv)
  7. net-misc/rsync-3.0.3 (iconv? virtual/libiconv)
  8. sys-devel/gcc-4.1.2 (virtual/libiconv)
  9. sys-devel/gcc-4.3.1-r1 (virtual/libiconv)
  10. sys-devel/gettext-0.17 (virtual/libiconv)
复制代码
看来依赖libiconv这个包的程序还很多,并且包括gcc这样重要的程序,那为何它们没出错过?(至少我还没遇到过)

请大家为我解惑,多谢!
回复 支持 反对

使用道具 举报

发表于 2008-7-16 06:49:32 | 显示全部楼层
a virtual package won't satisfy a dependency by itself.
it must have an implementation
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-16 13:07:28 | 显示全部楼层
THX
查询了一下,有关libiconv的库除了dev-haskell/iconv-0.4之外还有dev-libs/libiconv这个实现,但是这个包在~AMD64中被屏蔽了。
“a virtual package won't satisfy a dependency by itself.”,总觉得这样会有隐患,如果只安装了虚拟包而没有相应的实现的话,是不是一旦有程序调用这个虚拟包的时候就会出错呢?用了这么久的GCC而没遇到因为libiconv而出错,莫非是我运气好?呵呵
回复 支持 反对

使用道具 举报

发表于 2008-7-16 13:53:28 | 显示全部楼层
你还是看看/usr/portage/virtual/libiconv里的ebuild吧
dev-haskell/iconv不是libiconv的实现
之所以把libiconv弄成一个虚拟包,是因为在不同系统(linux,各种bsd)里iconv的实现形式不同
haskell的iconv只是haskell这个语言的iconv binding,和libiconv不在一个层次

对于你这个问题来说,如果你没有libiconv,你是不可能连接通过的
特别的,对于linux来说,glibc已经包含libiconv,所以linux里不需要单独的包

当然你这种精神还是有值得肯定的地方,只是希望以后尽量的不要想当然,而要切切实实搞清楚
回复 支持 反对

使用道具 举报

发表于 2008-7-16 13:57:29 | 显示全部楼层
可否问一下你是怎么查的mpd所依赖的库
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-7-16 15:23:07 | 显示全部楼层
Post by zhllg;1875134
你还是看看/usr/portage/virtual/libiconv里的ebuild吧
dev-haskell/iconv不是libiconv的实现
之所以把libiconv弄成一个虚拟包,是因为在不同系统(linux,各种bsd)里iconv的实现形式不同
haskell的iconv只是haskell这个语言的iconv binding,和libiconv不在一个层次

对于你这个问题来说,如果你没有libiconv,你是不可能连接通过的
特别的,对于linux来说,glibc已经包含libiconv,所以linux里不需要单独的包

当然你这种精神还是有值得肯定的地方,只是希望以后尽量的不要想当然,而要切切实实搞清楚

多谢版主详细解答,终于弄明白了,原来Linux中glibc已经包含了libiconv,怪不得没有安装单独的包。
至于想当然的认为iconv也是libiconv的一个实现,完全是因为第一次弄的时候看错了,以至于惯性的依然认为两者有关系。
那么我现在怀疑mpd对glibc中的libiconv调用有问题,不然怎么会只有它出错呢?呵呵,当然只是怀疑而已,除非我去读mpd的代码。

可否问一下你是怎么查的mpd所依赖的库

嗯,我是用equery u mpd查看mpd的各个USE所依赖的东西,或者直接看mpd的EBuild文件,虽然似乎都不全,但我没有更好的办法了,呵呵。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表