"undefined symbol: mg_free_type" 使用 Apache 2.4.26 和 Perl 5.10.1 安装 mod_perl 2.0.10 时
"undefined symbol: mg_free_type" when installing mod_perl 2.0.10 with Apache 2.4.26 and Perl 5.10.1
我正在尝试安装 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
我通过升级到 Perl 5.14.0 或更新版本解决了这个问题。
在 Perl 文档中,mg_free_type
首次出现在版本 5.14.0 中。您可以在 "Magical Functions" 下看到 5.12.4 but is in 5.14.0
中未列出的地方
我不确定这是否是正确的解决方案,因为 mod_perl2.0 将 Perl 5.6.1 列为最低版本:https://perl.apache.org/docs/2.0/user/install/install.html#item_Perl
当他们在 mod_perl 2.0.10 中添加对 perl 版本 5.22 的支持时引入了此错误:https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb63375da6e#diff-0a249c57fb8151f85647e167a883be1b
然后在 2018 年 1 月 4 日的 mod_Perl 补丁中修复 (2.0.11-dev):
https://github.com/apache/mod_perl/commit/f4d886fdf7d79d54a0647336b5623b840a053eab
要解决此问题,如果您的 perl <=5.13.6,或者如果您可以将 Perl 升级到版本 >5.13,则必须从 this commit of mod_perl 2.0.11-dev(或主干版本)的源代码进行编译以解决此问题.6 你可以用 mod_perl 2.0.10.
编译
此 Perl 提交中的 Perl 版本 5.13.6 源代码中引入了 Perl 中的此更改:
https://perl5.git.perl.org/perl.git/commit/d908838680ec40ea0e85f59ee66f5f56a225f9b4
mod_perl 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
我正在尝试安装 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
我通过升级到 Perl 5.14.0 或更新版本解决了这个问题。
在 Perl 文档中,mg_free_type
首次出现在版本 5.14.0 中。您可以在 "Magical Functions" 下看到 5.12.4 but is in 5.14.0
我不确定这是否是正确的解决方案,因为 mod_perl2.0 将 Perl 5.6.1 列为最低版本:https://perl.apache.org/docs/2.0/user/install/install.html#item_Perl
当他们在 mod_perl 2.0.10 中添加对 perl 版本 5.22 的支持时引入了此错误:https://github.com/apache/mod_perl/commit/82827132efd3c2e25cc413c85af61bb63375da6e#diff-0a249c57fb8151f85647e167a883be1b
然后在 2018 年 1 月 4 日的 mod_Perl 补丁中修复 (2.0.11-dev): https://github.com/apache/mod_perl/commit/f4d886fdf7d79d54a0647336b5623b840a053eab
要解决此问题,如果您的 perl <=5.13.6,或者如果您可以将 Perl 升级到版本 >5.13,则必须从 this commit of mod_perl 2.0.11-dev(或主干版本)的源代码进行编译以解决此问题.6 你可以用 mod_perl 2.0.10.
编译此 Perl 提交中的 Perl 版本 5.13.6 源代码中引入了 Perl 中的此更改: https://perl5.git.perl.org/perl.git/commit/d908838680ec40ea0e85f59ee66f5f56a225f9b4
mod_perl 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