【发布时间】:2019-10-19 14:32:05
【问题描述】:
所以在尝试安装各种 Perl 模块时,包括例如Module::Build,我收到来自 stdlib.h 的错误,例如:
In file included from lib/Simple.xs:2:
In file included from /usr/local/Cellar/perl/5.28.2/lib/perl5/5.28.2/darwin-thread-multi-2level/CORE/perl.h:819:
/usr/include/stdlib.h:147:38: error: expected ')'
size_t __width, int (* _Nonnull __compar)(const void *, const void *));
^
/usr/include/stdlib.h:147:26: note: to match this '('
size_t __width, int (* _Nonnull __compar)(const void *, const void *));
^
(还有更多错误,但这似乎是第一个错误,并且似乎是一个有代表性的示例。)
我相信这些错误是因为我安装的 cc 和包含的库不匹配,但我不是 c 程序员,不知道如何调试它。另外,这里的重点是安装perl模块,而不是学习C,所以我希望存在一些不涉及调试C的解决方案。
Perl: 5.28.2
macOS: 10.13.6
cc -v: Apple LLVM version 6.1.0 (clang-602.0.53) (based on LLVM 3.6.0svn)
Target: x86_64-apple-darwin17.7.0
Thread model: posix
【问题讨论】:
-
您正在安装的模块的文档说明了它与哪些操作系统兼容?哪些编译器?您正在使用其中一种操作系统吗?您正在使用其中一种编译器吗?
-
Jörg W Mittag - 与 perl 模块一样,它没有提及与特定操作系统或编译器的兼容性;一般来说,我认为 Perl 模块可以正常工作。 (在 Module::Build 的特殊情况下,它可能会令人困惑,因为它用于安装其他模块,因此它在这个意义上谈论安装。大概一旦安装,它将用于安装我真正关心的其他模块关于使用,例如 Math::Random。)
-
@Jörg W Mittag,错误来自 stdlib.h。这个问题与 Perl 或任何 Perl 模块无关
-
@ikegami:OP 正在安装 Perl 模块。我对 Perl 模块系统的工作原理并不十分熟悉,但我很确定是 Perl 模块系统或 Perl 模块本身控制着安装过程,包括使用哪个编译器。如果 Perl 模块(系统)决定使用与系统其余部分不兼容的编译器,那么您将收到类似这样的错误。
-
@Jörg W Mittag,执行的命令行输出到屏幕。它是由
perl -V:'cc.*'输出的变量构建的。使用的编译器应该与用于构建 Perl 本身的编译器相同(但您知道发行版喜欢破坏事物......)