Perl 安装XML::Parser需要expat.h

Perl 安装XML::Parser需要expat.h,perl,perl-module,cpan,yum,Perl,Perl Module,Cpan,Yum,我正在从事一个项目,该项目要求所有第三方(read:CPAN)perl模块都安装在perforce存储库中,这样依赖于它们的任何代码都可以成功运行,而无需任何其他人手动安装它们。不过,我在尝试安装XML::Parser时遇到了一个问题。我使用cpanminus安装我的CPAN模块,所以我运行了cpanm-L。所需目录中的XML::Parser(这在其他模块中使用过),并出现错误: Expat.xs:12:19: error: expat.h: No such file or directory

我正在从事一个项目,该项目要求所有第三方(read:CPAN)perl模块都安装在perforce存储库中,这样依赖于它们的任何代码都可以成功运行,而无需任何其他人手动安装它们。不过,我在尝试安装XML::Parser时遇到了一个问题。我使用cpanminus安装我的CPAN模块,所以我运行了
cpanm-L。所需目录中的XML::Parser
(这在其他模块中使用过),并出现错误:

Expat.xs:12:19: error: expat.h: No such file or directory
我习惯于使用Ubuntu和apt get,但在工作中我不得不使用RedHat,我不知道如何将expat安装到本地目录。我运行了
yum搜索expat
,得到了

expat.i386 : A library for parsing XML.
expat.x86_64 : A library for parsing XML.
所以我尝试了
yum安装--installroot=。expat.i386
,并出现以下错误:

Loaded plugins: rhnplugin, security
error: cannot open Packages index using db3 - No such file or directory (2)
error: cannot open Packages database in ./var/lib/rpm
Traceback (most recent call last):
  File "/usr/bin/yum", line 29, in ?
    yummain.user_main(sys.argv[1:], exit_code=True)
  File "/usr/share/yum-cli/yummain.py", line 309, in user_main
    errcode = main(args)
  File "/usr/share/yum-cli/yummain.py", line 157, in main
    base.getOptionsConfig(args)
  File "/usr/share/yum-cli/cli.py", line 187, in getOptionsConfig
    self.conf
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 665, in <lambda>
    conf = property(fget=lambda self: self._getConfig(),
  File "/usr/lib/python2.4/site-packages/yum/__init__.py", line 240, in _getConfig
    self._conf = config.readMainConfig(startupconf)
  File "/usr/lib/python2.4/site-packages/yum/config.py", line 804, in readMainConfig
    yumvars['releasever'] = _getsysver(startupconf.installroot, startupconf.distroverpkg)
  File "/usr/lib/python2.4/site-packages/yum/config.py", line 877, in _getsysver
    idx = ts.dbMatch('provides', distroverpkg)
TypeError: rpmdb open failed
加载的插件:rhnplugin,安全性
错误:无法使用db3打开包索引-没有这样的文件或目录(2)
错误:无法在./var/lib/rpm中打开包数据库
回溯(最近一次呼叫最后一次):
文件“/usr/bin/yum”,第29行,在?
yummain.user_main(sys.argv[1:],exit_code=True)
文件“/usr/share/yum-cli/yummain.py”,第309行,在user\u main中
errcode=main(args)
文件“/usr/share/yum-cli/yummain.py”,第157行,在main中
base.getoptionConfig(args)
GetOptionConfig中的文件“/usr/share/yum cli/cli.py”,第187行
self.conf
文件“/usr/lib/python2.4/site packages/yum/_init__.py”,第665行,在
conf=property(fget=lambda self:self.\u getConfig(),
文件“/usr/lib/python2.4/site packages/yum/_init__.py”,第240行,在_getConfig中
self._conf=config.readMainConfig(startupconf)
readMainConfig中的文件“/usr/lib/python2.4/site packages/yum/config.py”,第804行
yumvars['releasever']=\u getsysver(startupconf.installroot,startupconf.distributor)
文件“/usr/lib/python2.4/site packages/yum/config.py”,第877行,位于_getsysver中
idx=ts.dbMatch('provides','kg)
类型错误:rpmdb打开失败

我做错了什么?而且,一旦我安装了expat,我不知道如何告诉cpanm在哪里可以找到它。

我看到了一些东西可以帮助您走上正确的道路。首先,您想要的包名为
expat-devel
。此外,我认为您需要提供一个到--installroot选项的绝对路径,并且您可能需要bly不需要向yum提供包扩展,除非这与构建这些模块的方式有关(即,通常只需执行
yum安装expat-devel


您的rpmdb似乎也有问题,因为“rpmdb打开失败”消息。您可以运行
yum check
来查找rpmdb中的问题,但除此之外,我不能说包管理器的具体情况。也许其他人可以在这方面提供更多帮助。

我找到了一个解决方法。我改为安装了XML::Simple。起初,它看起来像是XML::Simple必需的XML::解析器,但经过一段时间之后我发现它需要XML::Parser或XML::SAX,所以我安装了XML::SAX,让XML::Simple正常工作。这足以满足我的需要。

只需从和下载expat即可安装它 美元/配置 $make
$make install

我尝试了
yum install--installroot=[absolute path]expat-devel
它说
没有可用的expat-devel包。
事实上,即使我尝试使用expat.i386,我也会遇到同样的错误你使用的是什么版本的Red Hat?我看到expat-devel与
Red Hat Enterprise Linux Server 5.9版(Tikanga)一起使用
Fedora release 17(Beefy Miracle)
也许这是rpmdb的另一个问题?
lsb_release-i-r
分销商ID:RedHatEnterpriseServer release:5.6
这似乎是一个常见问题(我刚刚搜索了“yum rpmdb open failed”,发现了很多讨论)。我会在这里发布我的发现,但您可能希望在正确的上下文中阅读。解决此问题后,您可能可以继续安装
expat-devel
。我找到的答案似乎建议我应该重建数据库,但我尝试了重建,但没有任何更改。我在网上搜索了expat-devel的rpm下载,但我没有找到5.6年前的东西