首页 > 解决方案 > 无线程编译 Perl

问题描述

我正在编译 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 之类的东西,以及类似的东西,但我可能缺少正确的使用方法。

如果没有性能影响,我也没有反对在 mod_perl 上启用线程(但也找不到如何做到这一点)(SO 上的帖子似乎暗示有 10% 的命中,但不确定那是否是仍然相关)

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

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 需要启用线程,如果是这种情况,有没有办法在编译选项中关闭它。

标签: perlmod-perl

解决方案


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

perl Makefile.PL MP_NO_THREADS=1

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


推荐阅读