3

将我的 mod_perl 站点从 Linux 主机移到 FreeBSD 后,日志文件中出现以下错误:

您的供应商尚未定义 POSIX 宏 SIGRTMIN,用于 ../../lib/POSIX.pm(自动拆分为 ../../lib/auto/POSIX/SigRt/_init.al)第 993 行\n

该脚本仅导入 POSIX 并利用一些功能(ceil 等)

我该如何解决这个问题?

4

2 回答 2

4

尝试从模块中只导入几个(或没有)例程:

use POSIX ();
my $n = POSIX::ceil(1.1);

这曾经在相同的情况下对我有用,我不知道为什么:)

于 2010-06-03T15:43:52.847 回答
4

FreeBSD大多是 POSIX 兼容的。例如,它没有定义 SIGRTMINandSIGRTMAX在它的signal.h. 我们在POSIX 的文档中被警告过:

此外,一些邪恶的供应商会声称符合 1003.1,但实际上并非如此:他们不会通过 PCTS(POSIX 合规性测试套件)。例如,一个供应商可能没有定义 EDEADLK,或者 open(2) 设置的 errno 值的语义可能不太正确。Perl 不会尝试验证 POSIX 合规性。这意味着你现在可以成功地说“使用 POSIX”,然后在你的程序中你发现你的供应商一直很松懈,毕竟没有可用的 ICANON 宏。这可能被解释为一个错误。

eugene y的解决方案可能会起作用,因为它会阻止自动导出到您的命名空间,但请确保在任何对ceil等的调用前加上POSIX::.

于 2010-06-03T17:51:30.683 回答