安装mod_perl2

时间:2016-11-22 15:13:34

标签: apache perl centos mod-perl2

我正在尝试使用以下配置安装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   

任何帮助都是适当的,如果我有问题,请进一步指导(请不要下来投票:))

4 个答案:

答案 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没有成功:(