Ошибка при установке mod_perl2

Я пытаюсь установить mod_perl2 с конфигурацией ниже:
ОС: CentOS выпуск 5.5 (финал)
Uname -a результат: x86_64 x86_64 x86_64 GNU / Linux
Версия Perl: v5.8.8 для x86_64-linux-thread-multi
версия apache: Apache / 2.2.3
Я скачал mod_perl2 с сайта Cpan
когда я пытаюсь запустить "perl Makefile.PL MP_APXS=/usr/local/httpd/bin/apxs", он выдает следующее:

Подпрограмма set_version переопределена в строке./Makefile.PL 137.
[info] генерирующий скрипт t/TEST
[info] генерирующий скрипт./t/cgi-bin/cookies.pl
[info] генерирующий скрипт./t/cgi-bin/next_available_port.pl
Проверка на Cwd... хорошо
Проверка для File:: Spec... ok
[info] генерирующий скрипт t/TEST
Генерация Makefile в стиле Unix
Написание Makefile для mod_perl2
[предупреждение] 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.

После запуска команды "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: предупреждение: избыточные элементы в инициализаторе структуры
modperl_env.c:642: предупреждение: (близка к инициализации 'MP_vtbl_env')
modperl_env.c: в функции 'modperl_env_init':
modperl_env.c: 661: предупреждение: передача аргумента 2 сброса Perl_mg_find
классификаторы из целевого типа указателя
modperl_env.c:673: предупреждение: неявное объявление функции mg_free_type
modperl_env.c:678: ошибка: "MGf_LOCAL" не объявлен (первое использование в этой функции)
modperl_env.c: в функции 'modperl_env_unload':
modperl_env.c: 690: предупреждение: передача аргумента 2 из 'Perl_mg_find' отбрасывает
классификаторы из целевого типа указателя
make 1: * [modperl_env.lo] Ошибка 1
make 1: выход из каталога `/opt/mod_perl-2.0.10/src/modules/perl '
make: * [modperl_lib] Ошибка 2

Любая помощь оценивается, если я спросил что-то не так, пожалуйста, направьте дальше (без голосов, пожалуйста:))

3 ответа

Эта константа, как было введено в 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 / f6 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)

Модифицированная / расширенная версия патча Матье Карбонно, описанного выше, была добавлена ​​в репозиторий mod_perl SVN 8 октября 2019 г.:

http://svn.apache.org/viewvc?view=revision&revision=1868115

С этим патчем mod_perl 2.0.11 будет компилироваться и устанавливаться с использованием Perl <= 5.8.8.

(Извините, у меня нет репутации, чтобы комментировать, только отвечу.)

Не знаю как, но mod_perl-2.0.6 успешно установлен. не имел успеха с mod_perl-2.0.10:(

Почему вы пытаетесь создать свою собственную версию mod_perl? Centos имеет предварительно собранную версию mod_perl, которая будет работать с предварительно собранной версией Perl, которая уже установлена.

$ sudo yum install mod_perl

(Конечно, это не поможет, если вы не используете системный Perl)

Другие вопросы по тегам