我正在尝试使用以下配置安装mod_perl2:
os: centos版本5.5(final)
uname -a结果: x86_64 x86_64 x86_64 gnu/linux
perl版本: v5.8.8为x86_64-linux-thread-multi-multi
apache版本: apache/apache/apache/apache/apache/2.2.3
我从CPAN网站下载了mod_perl2
当我尝试运行" perl makefile.pl mp_apxs =/usr/locar/local/httpd/bin/apxs"时,它给出以下输出:
subroutine set_version在./makefile.pl行137.
[信息]生成脚本T/Test
[info]生成脚本./t/cgi-bin/cookies.pl
[info]生成脚本./t/cgi-bin/next_available_port.pl
检查CWD ...好的
检查文件:: Spec ...好的
[信息]生成脚本T/Test
生成Unix风格的Makefile
为mod_perl2编写makefile
[警告] mod_perl dso库将以mod_perl.so
构建 [警告]您需要将以下内容添加到httpd.conf:
[警告]
[警告] loadModule perl_module模块/mod_perl.so
[警告]
[警告]根据您的构建,MOD_PERL可能不住在
中 [警告]模块/目录。
[警告]检查
的结果 [警告]
[警告] $/usr/local/httpd/bin/apxs -q libexecdir
[警告] [警告]并相应地调整LoadModule指令。
在" make"命令运行以下错误之后发生:
modperl_env.c:在函数'modperl_env_magic_local_all’中:
modperl_env.c:544:错误:'mgf_local'未申报(在此功能中首次使用)
modperl_env.c:544:错误:(每个未宣布的标识符仅报告一次
modperl_env.c:544:错误:对于每个功能,它都会出现在。)
modperl_env.c:在顶级:
modperl_env.c:642:警告:struct Initializer中的多余元素
modperl_env.c:642:警告:(接近'mp_vtbl_env'的初始化)
modperl_env.c:在函数'modperl_env_init’中:
modperl_env.c:661:警告:" perl_mg_find"丢弃的参数2
来自指针目标类型的预选赛
modperl_env.c:673:警告:函数'mg_free_type'
隐式声明 modperl_env.c:678:错误:'mgf_local'未申报(在此功能中首次使用)
modperl_env.c:在功能'modperl_env_unload'中:
modperl_env.c:690:警告:" perl_mg_find"丢弃的参数2
来自指针目标类型的预选赛
make1:* [modperl_env.lo]错误1
make1:离开目录`/opt/mod_perl-2.0.10/src/modules/perl'
制作: * [modperl_lib]错误2
如果我问过错误的话,请进一步指导任何帮助(请不要投票:))
perl 5.9.3中引入的这个常数,mod_perl从2.0.10使用它。
http://search.cpan.org/~vpit/variable-magic-0.62/lib/varible/magic.pm#mgf_localhttps://perl5.git.perl.org/perl.git/commit/A5063E7CD8FEF802EFD25FFED25FFE9DF2C3748F4254F6https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb63375da6ehttps://perldoc.perl.org/perlguts.html
要克服这一点,您必须修改mod_perl以使用perl版本的这种常数条件:
diff -ruw mod_perl-2.0.11/src/modules/perl/modperl_env.c mod_perl-2.0.11.patched/src/modules/perl/modperl_env.c
--- mod_perl-2.0.11/src/modules/perl/modperl_env.c 2017-12-06 11:08:55.000000000 -0500
+++ mod_perl-2.0.11.patched/src/modules/perl/modperl_env.c 2018-03-27 15:02:14.174790000 -0400
@@ -541,7 +541,9 @@
nmg = sv_magicext(nsv, mg->mg_obj, mg->mg_type, &MP_vtbl_env, (char*)NULL, 0);
nmg->mg_ptr = mg->mg_ptr;
nmg->mg_flags |= MGf_COPY;
+#if MP_PERL_VERSION_AT_LEAST(5, 9, 3)
nmg->mg_flags |= MGf_LOCAL;
+#endif
return 1;
}
@@ -679,7 +681,9 @@
/* Add our version instead */
mg = sv_magicext((SV*)ENVHV, (SV*)NULL, PERL_MAGIC_env, &MP_vtbl_env, (char*)NULL, 0);
mg->mg_flags |= MGf_COPY;
+#if MP_PERL_VERSION_AT_LEAST(5, 9, 3)
mg->mg_flags |= MGf_LOCAL;
+#endif
}
void modperl_env_unload(pTHX)
Mathieu Carbonneaux的修改/增强版本于2019年10月8日授予MOD_PERL SVN存储库:
http://svn.apache.org/viewvc?view=revision&revision=1868115
使用此补丁,mod_perl 2.0.11将使用perl< = 5.8.8。
编译和安装(对不起,我没有评论的声誉,只回答。)
为什么要构建自己的mod_perl版本?CentOS具有MOD_PERL的预构建版本,它将与已安装的Perl一起使用。
$ sudo yum install mod_perl
(当然,如果您不使用系统perl,这将无济于事)
不知道如何成功安装了mod_perl-2.0.6。MOD_PERL-2.0.10没有成功:(