【问题标题】:Installing XML::Parser requires expat.h安装 XML::Parser 需要 expat.h
【发布时间】:2013-03-07 05:59:30
【问题描述】:

我正在开展一个项目,该项目需要将所有第三方(阅读: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 search expat 并得到了

expat.i386 : A library for parsing XML.
expat.x86_64 : A library for parsing XML.

于是我试了yum install --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

我做错了什么?另外,一旦我安装了 expat,我不确定如何告诉 cpanm 在哪里可以找到它。

【问题讨论】:

    标签: perl perl-module cpan yum


    【解决方案1】:

    我看到了一些可以帮助您走上正确道路的事情。首先,你想要的包叫做expat-devel。另外,我认为您需要提供 --installroot 选项的绝对路径,并且您可能不需要为 yum 提供包扩展名,除非这与您构建这些模块的方式相关(即,您通常可以这样做yum install expat-devel)。

    您的 rpmdb 也可能有问题,因为您收到“rpmdb open failed”消息。您可以运行yum check 来查找rpmdb 中的问题,但除此之外,我不能说包管理器具体发生了什么。也许其他人可以在这方面提供更多帮助。

    【讨论】:

    • 我试过yum install --installroot=[absolute path] expat-devel,上面写着No package expat-devel available. 事实上,即使我用expat.i386 试试,我也会遇到同样的错误
    • 您使用的是哪个版本的红帽?我看到 expat-devel 有 Red Hat Enterprise Linux Server release 5.9 (Tikanga)Fedora release 17 (Beefy Miracle)。也许这是您的 rpmdb 的另一个问题?
    • lsb_release -i -rDistributor ID: RedHatEnterpriseServer Release: 5.6
    • 这似乎是一个常见的问题(我刚刚搜索了“yum rpmdb open failed”,发现很多讨论)。我会发布我在这里找到的内容,但您可能想在正确的上下文中自己阅读。解决此问题后,您可能可以继续安装expat-devel
    • 我找到的答案似乎表明我应该重建数据库,但我试过了,没有任何改变。我在网上搜索了 expat-devel 的 rpm 下载,但我没有找到 5.6 的任何东西
    【解决方案2】:

    嗯,我找到了解决方法。我安装了 XML::Simple 代替。起初它看起来像 XML::Simple 需要 XML::Parser,但经过一番查看后发现它需要 XML::Parser 或 XML::SAX,所以我安装了 XML::SAX 并让 XML::Simple 工作.足以满足我的需求。

    【讨论】:

      【解决方案3】:

      只需从http://sourceforge.net/projects/expat/ 下载并安装 expat,然后 $ ./配置 $ 制作 $ 制作安装

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-10-31
        • 2021-09-30
        • 2015-11-26
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多