конфликт .so объектов под apache mod_perl (GD, libgd.so) и php(gd.so)
- From
- Nikki Chumakov (2:5020/400)
- To
- All
- Date
- 2005-07-19T01:27:40Z
- Area
- RU.PERL
From: Nikki Chumakov <nspm_nikki@gattaca.ru>
Привет,
Стоит FC4 и стандартно в нее входящие httpd-2.0.54, mod_perl-2.0.1,
php-5.0.4, gd-2.0.33 (libgd).
В апаче нужны и php и mod_perl. php использует разделяемые модули, в
частности php-gd (/usr/lib/php/modules/gd.so), который ему нужен. Скипты
на mod_perl используют GD, точнее GD::SecurityImage. GD использует
/usr/lib/libgd.so.2.
libgd.so содержит функции с тем же именами, что и в gd.so от php-gd, но
с несовместимым интерфейсом или функциональностью. В результате
происходит следующее: скрипт под mod_perl GD::SecurityImage зовет GD,
который зовет функцию из libgd.so.2, которая зовет свои внутренние
функции, но некоторый момент вместо них зовутся одноименные функции из
php-gd(/usr/lib/php/modules/gd.so) и тут сервер падает.
Стек в момент падения выглядит так (gdCacheGet есть в libgd.so.2 и
gd.so, вызывается не оттуда, откуда надо).
#0 0x0285653b in gdCacheGet () from /usr/lib/php/modules/gd.so
#1 0x05d9cf90 in gdImageStringFTEx () from /usr/lib/libgd.so.2
#2 0x05d9e384 in gdImageStringFT () from /usr/lib/libgd.so.2
#3 0x00c641e6 in XS_GD__Image_stringFT (my_perl=0xa3e3658, cv=0xa6ef520)
at GD.xs:2166
#4 0x00b4998c in Perl_pp_entersub ()
from /usr/lib/perl5/5.8.6/i386-linux-thread-multi/CORE/libperl.so
#5 0x00b2b6e1 in Perl_runops_debug ()
from /usr/lib/perl5/5.8.6/i386-linux-thread-multi/CORE/libperl.so
#6 0x00ad8b9e in Perl_get_cv ()
from /usr/lib/perl5/5.8.6/i386-linux-thread-multi/CORE/libperl.so
#7 0x00add2e5 in Perl_call_sv ()
from /usr/lib/perl5/5.8.6/i386-linux-thread-multi/CORE/libperl.so
#8 0x0026de84 in modperl_callback () from /etc/httpd/modules/mod_perl.so
#9 0x0026e819 in modperl_callback_run_handlers ()
from /etc/httpd/modules/mod_perl.so
#10 0x0026eac4 in modperl_callback_per_dir ()
from /etc/httpd/modules/mod_perl.so
#11 0x00268fa7 in modperl_response_finish ()
from /etc/httpd/modules/mod_perl.so
#12 0x00269241 in modperl_response_handler_cgi ()
from /etc/httpd/modules/mod_perl.so
#13 0x00ee2f3c in ap_run_handler () from /usr/sbin/httpd
#14 0x00ee32d7 in ap_invoke_handler () from /usr/sbin/httpd
#15 0x00edfe11 in ap_process_request () from /usr/sbin/httpd
#16 0x00eda693 in _start () from /usr/sbin/httpd
#17 0x00eedafb in ap_run_process_connection () from /usr/sbin/httpd
#18 0x00eede30 in ap_process_connection () from /usr/sbin/httpd
#19 0x00ee0d9e in ap_graceful_stop_signalled () from /usr/sbin/httpd
#20 0x00ee100e in ap_graceful_stop_signalled () from /usr/sbin/httpd
#21 0x00ee112a in ap_graceful_stop_signalled () from /usr/sbin/httpd
#22 0x00ee1b0b in ap_mpm_run () from /usr/sbin/httpd
#23 0x00ee888e in main () from /usr/sbin/httpd
Как это можно починить, если в одном сервере хочется иметь и mod_perl:GD
и php-gd, с минимальным изменением дистрибутива? Пересобирать все подряд
статически не очень хочется. Может быть есть более простой способ?
--- ifmail v.2.15dev5.3
* Origin: Demos online service (2:5020/400)
SEEN-BY: 50/203 520 400/462 450/159 186 208 451/30 452/25 100 454/9 455/15
SEEN-BY: 461/33 43 74 106 132 640 464/34 465/204 467/24 469/125 200 999 478/44
SEEN-BY: 478/55 65 550/5004 5068 4600/126 4614/9 4616/3 4623/56 4625/8 9
SEEN-BY: 4626/100 4627/10 4632/10 4635/4 99 1024 4641/444 4642/27 48 4657/50
SEEN-BY: 5000/76 5001/50 5001 5002/76 5002 5003/34 5006/1 5007/1 5010/53 70
SEEN-BY: 5010/146 5011/13 5012/8 5015/4 28 214 5020/52 115 118 128 133 150 154
SEEN-BY: 5020/175 194 400 486 545 549 600 642 715 744 758 794 830 958 968 982
SEEN-BY: 5020/1057 1100 1169 1212 1234 1523 1604 1626 1642 1653 1665 1826 1829
SEEN-BY: 5020/1922 1930 2013 2020 2044 2142 2200 2238 2345 2590 2908 4400 4441
SEEN-BY: 5021/2 3 5022/128 5023/11 5024/1 73 5025/19 750 5026/14 49 5030/49 69
SEEN-BY: 5030/195 382 436 556 611 920 966 1016 1039 1063 1339 1520 1688 1900
SEEN-BY: 5031/7 47 63 70 5032/11 20 5033/35 5034/8 5035/3 38 63 5036/1 13
SEEN-BY: 5037/21 36 5038/4 5040/33 47 5041/4 5042/13 5045/7 42 5047/47 5049/1
SEEN-BY: 5049/6 157 5050/9 41 5051/15 35 5053/16 38 5054/1 8 9 35 36 37 45 50
SEEN-BY: 5054/66 67 81 85 5055/177 5056/16 5057/1 5058/77 5059/2 9 20 5060/88
SEEN-BY: 5060/90 5061/15 120 5062/1 4 7 36 5063/51 5064/7 35 39 5066/18
SEEN-BY: 5070/26 66 1222 5075/5 37 5077/70 80 5079/49 5080/80 1003 5081/2
SEEN-BY: 5082/6 5083/13 21 5090/23 105 108 113 5093/4 27 33 5096/18 5100/113
SEEN-BY: 6001/3 6023/1 6033/2727 6070/5
PATH: 5020/400 4441 52 5054/1 37