我正在尝试使用以下配置安装mod_perl2:
操作系统: CentOS版本5.5(最终版)
Uname -a结果: x86_64 x86_64 x86_64 GNU / Linux
Perl版本: v5.8.8 for x86_64-linux-thread-multi
apache版本: Apache / 2.2.3 < br />我从Cpan site下载了mod_perl2
当我尝试运行&#34; perl Makefile.PL MP_APXS = / usr / local / httpd / bin / apxs&#34;它给出了以下输出:
在./Makefile.PL第137行重新定义的子程序set_version [info]生成脚本t / TEST
[info]生成脚本./t/cgi-bin/cookies.pl
[info]生成脚本./t/cgi-bin/next_available_port.pl
检查Cwd ...确定
检查文件::规范...确定
[info]生成脚本t / TEST
生成Unix风格的Makefile
为mod_perl2编写Makefile [警告] mod_perl dso库将构建为mod_perl.so
[警告]您需要将以下内容添加到httpd.conf中:
[预警]
[警告] LoadModule perl_module modules / mod_perl.so
[预警]
[警告]取决于你的构建,mod_perl可能不会生活在 [警告]模块/目录。
[警告]检查结果 [预警]
[警告] $ / usr / local / httpd / bin / apxs -q LIBEXECDIR
[警告] [警告]并相应调整LoadModule指令。
&#34; make&#34;命令运行发生以下错误:
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丢弃指针目标类型的限定符
make 1: * [modperl_env.lo]错误1
make 1:离开目录`/opt/mod_perl-2.0.10/src/modules/perl'
make:* [modperl_lib]错误2
任何帮助都是适当的,如果我有问题,请进一步指导(请不要下来投票:))
答案 0 :(得分:1)
这个常量在perl 5.9.3中引入,而mod_perl在2.0.10中使用它。
http://search.cpan.org/~vpit/Variable-Magic-0.62/lib/Variable/Magic.pm#MGf_LOCAL https://perl5.git.perl.org/perl.git/commit/a5063e7cd8fef802efd25ffe9df2c3748f4254f6 https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb63375da6e https://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)
答案 1 :(得分:1)
上述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进行编译和安装。
(对不起,我没有发表评论的声誉,只能回答。)
答案 2 :(得分:0)
为什么要尝试构建自己的mod_perl版本? Centos有一个预构建的mod_perl版本,它可以与已经安装的预构建版本的Perl一起使用。
$ sudo yum install mod_perl
(当然,如果您不使用Perl系统,这将无济于事)
答案 3 :(得分:0)
不知道如何成功安装mod_perl-2.0.6。使用mod_perl-2.0.10没有成功:(