конфликт libz при запуске библиотеки perl - PullRequest
1 голос
/ 03 октября 2019

Работает на CentOS 7 Linux coolname 3.10.0-957.27.2.el7.x86_64 # 1 SMP Mon 29 июля 17:46:05 UTC 2019 x86_64 x86_64 x86_64 GNU / Linux

Наше приложение разработано вPerl и вызывает библиотеки c ++, используя swig, а также XS. Он работает в Centos.

У нас есть пакет CORE с именем db.pm, который фактически записан в c ++ и использует XS, чтобы позволить PERL вызывать его.

Используя db.pm, мы имеемPerl-код, который использует пакет GD для печати PNG-изображения. Поэтому этот код загружает db.pm, получает данные БД, создает диаграмму и пытается ее распечатать.

Проблема, с которой мы сталкиваемся, заключается в том, что при загрузке db.pm мы считаем, что к libz обращаются, а при использовании GD упаковывают еговызывает libpng, который также использует libz. В это время, когда мы пытаемся напечатать изображение, у нас есть дамп памяти.

Здесь находится gdb bt: enter image description here

 my $im = new GD::Image(100,100);

# allocate some colors
my $white = $im->colorAllocate(255,255,255);
my $black = $im->colorAllocate(0,0,0);       
my $red = $im->colorAllocate(255,0,0);      
my $blue = $im->colorAllocate(176,196,222);

# make the background transparent and interlaced
$im->transparent($white);
$im->interlaced('true');

# Put a black frame around the picture
$im->filledRectangle(0,0,50,50,'#f2f2f2');





# convert into png data
open my $out, '>', 'heatmap_img.png' or die;
binmode $out;
print $out $img->png;

print 'Success \n';

1;
...