在 Fedora 上安装 Perl Image::Magick

Install Perl Image::Magick on Fedora

我正在通过 cpan 安装 Image::Magick,但我一直收到此错误。我试过有和没有强迫它。我已经修剪了安装日志。我读过一些关于丢失 ImageMagick.h 文件的内容,但除此之外我一无所知。显然这是自 2007 年以来的一个普遍问题.....

[gandalf@Durmstrang ~]$ cpan -if Image::Magick

"/usr/bin/perl" "/usr/share/perl5/vendor_perl/ExtUtils/xsubpp"  -typemap "/usr/share/perl5/ExtUtils/typemap" -typemap "typemap"  Magick.xs > Magick.xsc && mv Magick.xsc Magick.c
gcc -c  -I/usr/local/include/ImageMagick-6 -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -I/usr/include/libxml2 -I"/usr/include/ImageMagick-6" -D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/include/freetype2 -g -O2 -Wall -pthread -DMAGICKCORE_HDRI_ENABLE=0 -DMAGICKCORE_QUANTUM_DEPTH=16 -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic   -DVERSION=\"6.89\" -DXS_VERSION=\"6.89\" -fPIC "-I/usr/lib64/perl5/CORE"  -D_LARGE_FILES=1 -DHAVE_CONFIG_H Magick.c
Magick.xs: In function ‘XS_Image__Magick_ComplexImages’:
Magick.xs:3475:5: error: unknown type name ‘ComplexOperator’
     ComplexOperator
     ^
Magick.xs:3510:8: error: ‘UndefinedComplexOperator’ undeclared (first use in this function)
     op=UndefinedComplexOperator;
        ^
Magick.xs:3510:8: note: each undeclared identifier is reported only once for each function it appears in
Magick.xs:3516:31: error: ‘MagickComplexOptions’ undeclared (first use in this function)
         in=ParseCommandOption(MagickComplexOptions,MagickFalse,(char *)
                               ^
Magick.xs:3524:13: error: ‘ComplexOperator’ undeclared (first use in this function)
         op=(ComplexOperator) in;
             ^
Magick.xs:3524:30: error: expected ‘;’ before ‘in’
         op=(ComplexOperator) in;
                              ^
Magick.xs:3548:38: error: expected ‘;’ before ‘in’
                 op=(ComplexOperator) in;
                                      ^
Magick.xs:3563:5: warning: implicit declaration of function ‘ComplexImages’ [-Wimplicit-function-declaration]
     image=ComplexImages(image,op,exception);
     ^
Magick.xs:3563:10: warning: assignment makes pointer from integer without a cast [enabled by default]
     image=ComplexImages(image,op,exception);
          ^
Magick.xs: In function ‘XS_Image__Magick_Mogrify’:
Magick.xs:9824:11: warning: implicit declaration of function ‘RotationalBlurImageChannel’ [-Wimplicit-function-declaration]
           image=RotationalBlurImageChannel(image,channel,geometry_info.rho,
           ^
Magick.xs:9824:16: warning: assignment makes pointer from integer without a cast [enabled by default]
           image=RotationalBlurImageChannel(image,channel,geometry_info.rho,
                ^
Magick.xs:10895:11: warning: implicit declaration of function ‘CannyEdgeImage’ [-Wimplicit-function-declaration]
           image=CannyEdgeImage(image,geometry_info.rho,geometry_info.sigma,
           ^
Magick.xs:10895:16: warning: assignment makes pointer from integer without a cast [enabled by default]
           image=CannyEdgeImage(image,geometry_info.rho,geometry_info.sigma,
                ^
Magick.xs:10916:11: warning: implicit declaration of function ‘HoughLineImage’ [-Wimplicit-function-declaration]
           image=HoughLineImage(image,(size_t) geometry_info.rho,(size_t)
           ^
Magick.xs:10916:16: warning: assignment makes pointer from integer without a cast [enabled by default]
           image=HoughLineImage(image,(size_t) geometry_info.rho,(size_t)
                ^
Magick.xs:10939:11: warning: implicit declaration of function ‘MeanShiftImage’ [-Wimplicit-function-declaration]
           image=MeanShiftImage(image,(size_t) geometry_info.rho,(size_t)
           ^
Magick.xs:10939:16: warning: assignment makes pointer from integer without a cast [enabled by default]
           image=MeanShiftImage(image,(size_t) geometry_info.rho,(size_t)
                ^
make: *** [Magick.o] Error 1
  JCRISTY/PerlMagick-6.89-1.tar.gz
  /usr/bin/make -- NOT OK
Running make test
  Can't test without successful make
Running make install
  Make had returned bad status, install seems impossible

问题是 CPAN 不知道非 Perl 依赖项。

Perl Image::Magick 模块只是 C 库的包装器。在构建 Perl 模块之前,您需要安装该库。

$ sudo yum install ImageMagick

估计还需要ImageMagick的开发包。

$ sudo yum install ImageMagick-devel

但是只安装已经为 Fedora 打包的 RPM 版本可能更容易(它会自动引入任何其他要求)。

$ sudo yum install ImageMagick-perl

在 Fedora、CentOS、Ubuntu 和更多系统中,通过 cpan 程序获取 Image::Magick 安装时存在此类挑战,并且 Image::Magick 的安装脚本存在敏感性 Image::Magick 似乎已经有几年了(如果四处搜索的话)。对于桌面 Linux 以及通过 Apache cpanel 更是如此。有收件人,但至少在 Ubuntu,他们并没有解决所有问题。有时,为了正确处理,必须首先使用 ImageMagick 删除相关库以重置链接。所有建议的解决方案都围绕在使用 'cpan' 之前安装其他东西展开。然而,我发现,最好的方法根本不是从源代码编译,而是在可用时安装二进制 ImageMagick 应用程序,以及 cpan 前后的相关库,就像这样——在 Ubuntu 中,但是适用于 Fedora 它应该相似或大致相同:

sudo apt-get install perlmagick
sudo apt-get install ImageMagick
sudo cpan install Image::Magick
sudo apt-get install libperl-dev

为了完整起见,如果找不到正确的二进制文件,则必须注意按照 http://www.imagemagick.org 上的指示预安装所有相关库,然后这组命令将替换上面的第 2 行,在 'sudo -i'(在 Ubuntu 中)或 Fedora 中的等效文件之后执行时,在临时文件夹中:

wget http://www.imagemagick.org/download/ImageMagick.tar.gz
tar xvfz ImageMagick.tar.gz
cd Imag*
./configure --with-perl
make
make install

安装完成后,继续上面的第 3 行。将命令的开头调整为适合其他形式的 linux 的形式。在此之后,一个在开始时 use Image::Magick; 的 perl 程序应该能够完美地执行诸如调整 jpg 图像大小等操作。