4

我正在尝试通过 CPAN 安装 Perl XML::LibXML 模块,但出现以下错误。我正在使用 Windows 7 机器和 Perl v5.16.1。我做了很多搜索,但没有得到任何解决方案。

应该是什么问题?

Set up gcc environment - 3.4.5 (mingw-vista special r3)
enable native perl UTF8
Checking for ability to link against xml2...no
Checking for ability to link against libxml2...libxml2, zlib, and/or the Math library (-lm) have not been found.
Try setting LIBS and INC values on the command line
Or get libxml2 from
  http://xmlsoft.org/
If you install via RPMs, make sure you also install the -devel
RPMs, as this is where the headers (.h files) are.

Also, you may try to run perl Makefile.PL with the DEBUG=1 parameter
to see the exact reason why the detection of libxml2 installation
failed or why Makefile.PL was not able to compile a test program.
**No 'Makefile' created  SHLOMIF/XML-LibXML-2.0014.tar.gz
  C:\Perl\bin\perl.exe Makefile.PL INSTALLDIRS=site -- NOT OK**
Running make test
  Make had some problems, won't test
Running make install
  Make had some problems, won't install
**Could not read metadata file. Falling back to other methods to determine prerequisites**
Failed during this command:
 SHLOMIF/XML-LibXML-2.0014.tar.gz             : writemakefile NO -- No 'Makefile' created
4

3 回答 3

5

目前尚不清楚您使用的是哪个 Perl 发行版。在 Windows 上,最容易使用ActivePerl及其本机包管理器ppm(不是 CPAN)。

在我的 Windows 7 机器上,我可以XML::LibXML使用以下命令毫无问题地安装:

ppm install XML::LibXML
于 2012-12-12T10:40:28.000 回答
0

对于 Windows 上的 ActivePerl,XML::LibXML 不再通过 PPM 可用,因为缺少必须手动安装的依赖项。

通过 CPAN 安装是正确的方法,但您需要确保存在 libxml2 及其依赖项。XML::LibXML 需要它们。

安装(来自这里,感谢 Rudy Rodriguez)是一条漫长而曲折的道路,但它可以工作(Win 8.1,ActivePerl 5.20.1 x64):

  • 获取所需的 libxml2、iconv、zlib(均来自此处)和gettext-tools的二进制包。

  • 将所有文件提取到同一目录(例如 C:\perl_libxml\merged),以便将每个 zip 文件中的 include、lib 等子目录中的文件提取到一个常见的包含、lib 等目录中

  • 将 /libxml2/libxml 文件夹上移一级,即到 /libxml,因为这是预期的默认目录

  • 将 libz.a 重命名为 zlib.a(在 lib 目录中)

  • 安装依赖项

    ppm install dmake MinGW XML::NamespaceSupport XML::SAX
    
  • 将 c:\perl_libxml\merged\bin 添加到 Windows PATH
  • 转到失败的 cpan 构建所在的目录,例如 c:\perl64\cpan\build\XML-LibXML<...>
  • 跑:

    Makefile.PL INC=-IC:\perl_libxml\merged\include LIBS=-LC:\perl_libxml\merged\lib
    

    Makefile 的构建应该成功。如果不是,检查LIBS和INC参数是否指向正确的目录

  • dmake
    

    如果失败,请检查您的路径条目是否设置正确

  • dmake test
    

    如果 'dmake test' 失败并出现以下神秘错误:

    load_file:%1 is not a valid Win32 application at C:/Perl64/lib/DynaLoader.pm line 191
    

    可能是某些库的不同版本存在于您的 PATH 中,因此在构建期间进行了链接。

    我的 PATH 中有另一个 MinGW 环境,导致链接错误的库。我可以通过使用Windows Server 2003 平台 SDK中的“依赖”工具检查构建的 libxml.dll 来解决它。您可以看到 libxml.dll 使用了哪个 DLL 以及为哪个平台编译。所有这些都必须匹配并且也匹配您的 Perl 版本,x86 或 x64。

  • 如果测试成功,最后安装 XML::LibXML

    dmake install
    

旁注:我知道这个问题已经很老了,但我把这个解决方案放在这里作为其他人在未来遇到同样问题的参考(也许我就是其中之一......)。

于 2015-06-24T18:13:02.513 回答
0

安装Strawberry Perl,它带有 XML::LibXML 及其内置依赖项。

于 2015-06-24T18:55:41.013 回答