【问题标题】:Compile Perl without threads无线程编译 Perl
【发布时间】:2020-02-20 13:43:58
【问题描述】:

我正在编译 Perl 5.30.1,并将使用 mod_perl 2.0.11 和 Apache 2.4.41。

如果我尝试使用 perl MakeFile.pm 编译 mod_perl,我会得到

Configuring Apache/2.4.41 mod_perl/2.0.11 Perl/v5.30.1
Using Perl 5.030001 w/o ithreads and httpd-2.4.
Failed requirements: Perl built with ithreads (build perl with -Duseithreads)

我们不使用线程,所以感觉最简单的方法是从 Perl 编译选项中删除它...

我可以看到人们说如何使用它进行编译(我猜在旧版本的 Perl 上默认情况下它是关闭的?)

-Dusethreads

但我假设它现在默认启用?在这种情况下,没有它我该如何编译?

如果我查看它建议的 myconfig 文件

useithreads=undef

我尝试过诸如 -Dusethreads=no 或 false 之类的方法,但我可能缺少正确的使用方法。

如果没有性能影响(S.O 上的帖子似乎表明有 10% 的影响,但不是确定这是否仍然相关)

我采取的步骤(新服务器)是..下载

perl-5.30.1 and mod_perl-2.0.11

然后

CFLAGS='-m64 -mtune=nocona' ./Configure -des -A ccflags=-fPIC -Dprefix=/opt/perl  

perl -v 不显示线程。

然后是 mod_perl

Perl Makefile.PL

Apache 编译

./configure --enable-proxy --enable-rewrite --enable-headers --enable-ssl --with-apr=/usr/local/apr/

编辑:所以可能是 mod_perl 需要启用线程,如果是这种情况,有没有办法在编译选项中关闭它。

【问题讨论】:

  • Perl 默认构建时没有线程(可能在 Windows 上除外?)
  • 错误是说没有满足线程的要求,这意味着它想要线程。
  • 哦!我读错了,以为是说我用线程编译了它……我想接下来会出现相反的问题,如何使 mod_perl 不需要线程,或者它是强制性的。
  • 顺便说一下,查看是否添加了线程支持的简单方法是perl -v。如果添加了支持,thread 将包含在拱形(“为...构建”)字符串中。
  • 您能否提供您为解决当前情况而采取的步骤,以便我可以复制它们来研究问题?

标签: perl mod-perl


【解决方案1】:

我认为的答案似乎是使用选项编译 mod_perl..

perl Makefile.PL MP_NO_THREADS=1

如果有人想提供一个更完整的答案来说明现在是否不希望这样做(或任何其他信息),因为 Apache 2.4 似乎有一些变化,我很乐意接受他们的回答。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-13
    • 1970-01-01
    • 2012-11-06
    • 2013-01-10
    • 2010-10-23
    • 2015-06-24
    • 2015-07-11
    • 1970-01-01
    相关资源
    最近更新 更多