linux - 使用 Apache 2.4.26 和 Perl 5.10.1 安装 mod_perl 2.0.10 时出现 "undefined symbol: mg_free_type"

标签 linux apache perl centos6 mod-perl2

我正在尝试安装 mod_perl 2.0.10 以与新的 Apache 2.4 实例一起使用。我已经自行启动并运行了 Apache 2.4.26,但我还需要安装 mod_perl 才能使几个模块正常工作。

问题是:mod_perl 总是无法通过测试,声称:

Syntax error on line 82 of .../t/conf/httpd.conf: Cannot load .../src/modules/perl/mod_perl.so into server: .../src/modules/perl/mod_perl.so: undefined symbol: mg_free_type

我能找到的唯一信息是:Error when installing mod_perl2 。不幸的是,它并没有解决问题。

使用 CentOS 版本 6.8(最终版) x86_64 x86_64 x86_64 GNU/Linux

日志中的更多内容:

> make test
cd "src/modules/perl" && make
make[1]: Entering directory `/software/apa/mod_perl/mod_perl-2.0.10/src/modules/perl'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/software/apa/mod_perl/mod_perl-2.0.10/src/modules/perl'
...
make[1]: Leaving directory `/software/apa/mod_perl/mod_perl-2.0.10/xs'
/usr/bin/perl -Iblib/arch -Iblib/lib \
    t/TEST -clean
[warning] setting ulimit to allow core files
ulimit -c unlimited; /usr/bin/perl /software/apa/mod_perl/mod_perl-2.0.10/t/TEST -clean
APACHE_TEST_APXS= APACHE_TEST_GROUP= APACHE_TEST_HTTPD= APACHE_TEST_PORT= APACHE_TEST_USER= \
    /usr/bin/perl -Iblib/arch -Iblib/lib \
    t/TEST -bugreport -verbose=0 
[warning] setting ulimit to allow core files
ulimit -c unlimited; /usr/bin/perl /software/apa/mod_perl/mod_perl-2.0.10/t/TEST -bugreport -verbose=0
/software/apa/apa24/bin/httpd.prefork  -d /software/apa/mod_perl/mod_perl-2.0.10/t -f /software/apa/mod_perl/mod_perl-2.0.10/t/conf/httpd.conf -D APACHE2 -D APACHE2_4 -D PERL_USEITHREADS
using Apache/2.4.26 (prefork MPM)

waiting 300 seconds for server to start: .httpd.prefork: Syntax error on line 82 of /software/apa/mod_perl/mod_perl-2.0.10/t/conf/httpd.conf: Cannot load /software/apa/mod_perl/mod_perl-2.0.10/src/modules/perl/mod_perl.so into server: /software/apa/mod_perl/mod_perl-2.0.10/src/modules/perl/mod_perl.so: undefined symbol: mg_free_type
[  error] 
server has died with status 255 (t/logs/error_log wasn't created, start the server in the debug mode)
sh: line 1:  3359 Terminated              /usr/bin/perl /software/apa/mod_perl/mod_perl-2.0.10/t/TEST -bugreport -verbose=0
make: *** [run_tests] Error 143

最佳答案

此错误是在 mod_perl 2.0.10 中添加对 perl 版本 5.22 的支持时引入的:https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb63375da6e#diff-0a249c57fb8151f85647e167a883be1b

然后在 2018 年 1 月 4 日 (2.0.11-dev) 的 mod_Perl 补丁中修复: https://github.com/apache/mod_perl/commit/f4d886fdf7d79d54a0647336b5623b840a053eab

要解决此问题,您必须从 this commit of mod_perl 2.0.11-dev 的源代码进行编译(或主干版本)来解决问题,如果您有 perl <=5.13.6,或者如果您可以将 Perl 升级到版本 >5.13.6,则可以使用 mod_perl 2.0.10 进行编译。

此 Perl 提交中的 Perl 版本 5.13.6 源代码中引入了 Perl 中的此更改: https://perl5.git.perl.org/perl.git/commit/d908838680ec40ea0e85f59ee66f5f56a225f9b4

src/modules/perl/modperl_env.c 中的 mod_perl 修复(最后 2.0.11-dev )使用 mg_free 的上下文用法来修复问题:

#if MP_PERL_VERSION_AT_LEAST(5, 13, 6)
    mg_free_type((SV*)ENVHV, PERL_MAGIC_env);
#else
    mg_free((SV*)ENVHV);
#endif

关于linux - 使用 Apache 2.4.26 和 Perl 5.10.1 安装 mod_perl 2.0.10 时出现 "undefined symbol: mg_free_type",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44767291/

相关文章:

java - Ant: 没有那个文件或目录

linux - 使用 perl one-liner 解析电子邮件列表

linux - unix中同一目录中的多个文件比较

reactjs - 引入ALB后,出现Mixed Content Error

java - 将日志尾部通过管道传输到脚本如何导致生成日志的进程停止生成条目?

linux - 我如何通过 ssh 进入一台机器,等待提示,然后向它发送一堆命令?

java - 将动态递增的日志文件数据从FTP复制到本地

apache - 试图在 Apache : error 13 (search permissions missing) 上运行 Flask

Perl - while 循环的意外结果

perl - 如何防止大括号在 Emacs cperl 模式下移动?