windows7 cygwin perl XML::Parser libexpat*:安装失败

windows7 cygwin perl XML::Parser libexpat* : failing to install

我的直接问题:尝试使用 cpanm 安装 pel 模块 XML:Parser 失败,显然是由于对 expat-devel 或 libexpat1-dev 或类似软件的依赖。
(我需要这个 XML::Parser 模块作为 end-goal Spreadsheet::ParseXLSX 模块的依赖项。)

$ cpanm XML::Parser
--> Working on XML::Parser
Fetching http://www.cpan.org/authors/id/T/TO/TODDR/XML-Parser-2.46.tar.gz ... OK
Configuring XML-Parser-2.46 ... ! Configure failed for XML-Parser-2.46. See ~/.cpanm/work/1626990186.1404/build.log for details.
N/A

build.log 文件的相关部分似乎是

Expat must be installed prior to building XML::Parser and I can't find
it in the standard library directories. Install 'expat-devel' (or
'libexpat1-dev') package with your OS package manager. See 'README'.

运行 cygwin setup-x86_64.exe(版本 2.908 或 2.909)我已经安装了“libexpat-devel”和“libexpat1”...没有软件包列表完全命名为 'expat-devel' 或 'libexpat1-dev'.

$ cygcheck -c libexpat-devel libexpat1
Cygwin Package Information
Package              Version        Status
libexpat-devel       2.2.6-1        OK
libexpat1            2.2.6-1        OK

我现在已经做了几次迭代;我相信无论是否安装了这些软件包中的一个或两个,都会以完全相同的方式报告失败。

我在第二台 W7 膝上型电脑上有一个工作的 cygwin+perl 系统,安装了这两个“libexpat-devel”和“libexpat1”包(cygcheck 输出是相同的)。在第二台笔记本电脑上,XML::Parser 模块安装成功,依赖于 XML:Parser 和 Spreadsheet:ParseXLSX 的 perl 脚本成功执行 运行。

我一直无法弄清楚两者之间有什么区别。 AFAICT 可能(应该?)相关的文件出现在两台笔记本电脑的相同 cygwin 文件系统位置中:

/cygdrive/c/cygwin64/lib/libexpat.a
/cygdrive/c/cygwin64/lib/libexpat.dll.a
/cygdrive/c/cygwin64/lib/pkgconfig/expat.pc
/cygdrive/c/cygwin64/usr/include/expat.h
/cygdrive/c/cygwin64/usr/include/expat_config.h
/cygdrive/c/cygwin64/usr/include/expat_external.h

我查看了其他几个具有相关标题的问题:我发现的大多数线程 (a) 已有多年历史,并且 (b) 讨论了使用 [= 在真实的 Linux 系统上安装软件包46=] 或等价物。 也许我的 search-fu 没有达到标准,但我还没有发现任何与可使用安装的“(lib)expat(1)-dev(el)”包的确切命名变体相关的最新问题cygwin setup-x86_64.exe,虽然我不确定这是问题的根源还是仅仅是分散注意力。

提前感谢您对如何进行的任何启发and/or建议。

尝试安装 libnsl-dev。似乎 XML::Parser 使用 Devel::CheckLib 来检查 headers 和 Expat 的库是否存在。它通过创建一个包含 #include <expat.h> 语句的小型 C 程序来实现这一点,它试图用 C 编译器编译该语句并添加链接器标志 -lexpat。问题在于它还添加了来自 perl 配置哈希的链接器标志,其中包括 -lnsl.

$ perl -MConfig -E'say $Config{libs}'
-lpthread -lnsl -lgdbm -ldb -ldl -lcrypt -lgdbm_compat