在 Mac 10.9.5 上安装 Rmagick 失败

Fail to Install Rmagick on Mac 10.9.5

我尝试将 rails 从 4.1.1 升级到 4.2.0,然后安装 Rmagick 时出错。 在升级 rails 之前,Rmagick 在 rails4.1.1 上运行良好。 重装ImageMagick后试了一下,还是报错

这就是我得到的

     sudo gem install rmagick -v 2.13.4
    Building native extensions.  This could take a while...
    ERROR:  Error installing rmagick:
        ERROR: Failed to build gem native extension.

        /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby extconf.rb
    checking for Ruby version >= 1.8.5... yes
    checking for xcrun... yes
    checking for Magick-config... yes
    checking for ImageMagick version >= 6.4.9... yes
    checking for stdint.h... yes
    checking for sys/types.h... yes
    checking for wand/MagickWand.h... yes
    checking for snprintf() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for AcquireImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for AffinityImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for AffinityImages() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for AutoGammaImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for AutoLevelImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for BlueShiftImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for ColorMatrixImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for ConstituteComponentTerminus() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for DeskewImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for DestroyConstitute() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for EncipherImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for EqualizeImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for EvaluateImages() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for FloodfillPaintImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for FunctionImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for GetAuthenticIndexQueue() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for GetAuthenticPixels() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for GetImageAlphaChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for GetMagickFeatures() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for GetVirtualPixels() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for LevelImageColors() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for LevelColorsImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for LevelizeImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for LiquidRescaleImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for MagickLibAddendum() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for OpaquePaintImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for QueueAuthenticPixels() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for RemapImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for RemapImages() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for RemoveImageArtifact() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for RotationalBlurImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for RotationalBlurImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for SelectiveBlurImageChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for SetImageAlphaChannel() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for SetImageArtifact() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for SetMagickMemoryMethods() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for SparseColorImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for StatisticImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for SyncAuthenticPixels() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for TransformImageColorspace() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for TransparentPaintImage() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for TransparentPaintImageChroma() in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... no
    checking for QueryMagickColorname() new signature... yes
    checking for Image.type in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for DrawInfo.kerning in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for DrawInfo.interline_spacing in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for DrawInfo.interword_spacing in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for DitherMethod in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for MagickFunction in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for ImageLayerMethod in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for long double in assert.h,ctype.h,stdio.h,stdlib.h,math.h,time.h,stdint.h,sys/types.h,wand/MagickWand.h... yes
    checking for AlphaChannelType.CopyAlphaChannel... yes
    checking for AlphaChannelType.BackgroundAlphaChannel... yes
    checking for CompositeOperator.BlurCompositeOp... yes
    checking for CompositeOperator.DistortCompositeOp... yes
    checking for CompositeOperator.LinearBurnCompositeOp... yes
    checking for CompositeOperator.LinearDodgeCompositeOp... yes
    checking for CompositeOperator.MathematicsCompositeOp... yes
    checking for CompositeOperator.PegtopLightCompositeOp... yes
    checking for CompositeOperator.PinLightCompositeOp... yes
    checking for CompositeOperator.VividLightCompositeOp... yes
    checking for CompressionType.DXT1Compression... yes
    checking for CompressionType.DXT3Compression... yes
    checking for CompressionType.DXT5Compression... yes
    checking for CompressionType.ZipSCompression... yes
    checking for CompressionType.PizCompression... yes
    checking for CompressionType.Pxr24Compression... yes
    checking for CompressionType.B44Compression... yes
    checking for CompressionType.B44ACompression... yes
    checking for DistortImageMethod.BarrelDistortion... yes
    checking for DistortImageMethod.BarrelInverseDistortion... yes
    checking for DistortImageMethod.BilinearForwardDistortion... yes
    checking for DistortImageMethod.BilinearReverseDistortion... yes
    checking for DistortImageMethod.DePolarDistortion... yes
    checking for DistortImageMethod.PolarDistortion... yes
    checking for DistortImageMethod.PolynomialDistortion... yes
    checking for DistortImageMethod.ShepardsDistortion... yes
    checking for DitherMethod.NoDitherMethod... yes
    checking for FilterTypes.KaiserFilter... yes
    checking for FilterTypes.WelshFilter... yes
    checking for FilterTypes.ParzenFilter... yes
    checking for FilterTypes.LagrangeFilter... yes
    checking for FilterTypes.BohmanFilter... yes
    checking for FilterTypes.BartlettFilter... yes
    checking for FilterTypes.SentinelFilter... yes
    checking for MagickEvaluateOperator.PowEvaluateOperator... yes
    checking for MagickEvaluateOperator.LogEvaluateOperator... yes
    checking for MagickEvaluateOperator.ThresholdEvaluateOperator... yes
    checking for MagickEvaluateOperator.ThresholdBlackEvaluateOperator... yes
    checking for MagickEvaluateOperator.ThresholdWhiteEvaluateOperator... yes
    checking for MagickEvaluateOperator.GaussianNoiseEvaluateOperator... yes
    checking for MagickEvaluateOperator.ImpulseNoiseEvaluateOperator... yes
    checking for MagickEvaluateOperator.LaplacianNoiseEvaluateOperator... yes
    checking for MagickEvaluateOperator.MultiplicativeNoiseEvaluateOperator... yes
    checking for MagickEvaluateOperator.PoissonNoiseEvaluateOperator... yes
    checking for MagickEvaluateOperator.UniformNoiseEvaluateOperator... yes
    checking for MagickEvaluateOperator.CosineEvaluateOperator... yes
    checking for MagickEvaluateOperator.SineEvaluateOperator... yes
    checking for MagickEvaluateOperator.AddModulusEvaluateOperator... yes
    checking for MagickFunction.ArcsinFunction... yes
    checking for MagickFunction.ArctanFunction... yes
    checking for MagickFunction.PolynomialFunction... yes
    checking for MagickFunction.SinusoidFunction... yes
    checking for ImageLayerMethod.FlattenLayer... yes
    checking for ImageLayerMethod.MergeLayer... yes
    checking for ImageLayerMethod.MosaicLayer... yes
    checking for ImageLayerMethod.TrimBoundsLayer... yes
    checking for VirtualPixelMethod.HorizontalTileVirtualPixelMethod... yes
    checking for VirtualPixelMethod.VerticalTileVirtualPixelMethod... yes
    checking for VirtualPixelMethod.HorizontalTileEdgeVirtualPixelMethod... yes
    checking for VirtualPixelMethod.VerticalTileEdgeVirtualPixelMethod... yes
    checking for VirtualPixelMethod.CheckerTileVirtualPixelMethod... yes
    checking for ruby/io.h... yes
    checking for rb_frame_this_func() in ruby.h,ruby/io.h... yes
    creating extconf.h
    creating Makefile


    ======================================================================
    Sat 31Jan15 12:34:19
    This installation of RMagick 2.13.4 is configured for
    Ruby 2.0.0 (universal.x86_64-darwin13) and ImageMagick 
    ======================================================================



    make "DESTDIR="
    compiling rmagick.c
    compiling rmdraw.c
    ~~~~~~~~~~~~~~~~~
compile some files
    ~~~~~~~~~~~~~~~~~
    compiling rminfo.c
    compiling rmmain.c
    rmmain.c:1724:28: error: use of undeclared identifier 'MagickSupport'
        features = rb_str_new2(MagickSupport);
                               ^
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/ruby/intern.h:760:27: note: expanded from macro 'rb_str_new_cstr'
        (__builtin_constant_p(str)) ?               \
                              ^
    rmmain.c:1724:28: error: use of undeclared identifier 'MagickSupport'
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/ruby/intern.h:761:14: note: expanded from macro 'rb_str_new_cstr'
            rb_str_new((str), (long)strlen(str)) :  \
                        ^
    rmmain.c:1724:28: error: use of undeclared identifier 'MagickSupport'
    /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/include/ruby-2.0.0/ruby/intern.h:762:18: note: expanded from macro 'rb_str_new_cstr'
            rb_str_new_cstr(str);                   \
                            ^
    rmmain.c:1724:14: error: assigning to 'volatile VALUE' (aka 'volatile unsigned long') from incompatible type 'void'
        features = rb_str_new2(MagickSupport);
                 ^
    4 errors generated.
    make: *** [rmmain.o] Error 1


    Gem files will remain installed in /Library/Ruby/Gems/2.0.0/gems/rmagick-2.13.4 for inspection.
    Results logged to /Library/Ruby/Gems/2.0.0/gems/rmagick-2.13.4/ext/RMagick/gem_make.out

而且,这些是更多信息。

ruby -v
ruby 2.0.0p481 (2014-05-08 revision 45883) [universal.x86_64-darwin13]


 brew info imagemagick
imagemagick: stable 6.9.0-3 (bottled), HEAD
http://www.imagemagick.org
/usr/local/Cellar/imagemagick/6.9.0-3 (1440 files, 22M) *
  Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/imagemagick.rb
==> Dependencies
Build: xz ✔, pkg-config ✔
Required: libtool ✔, xz ✔
Recommended: jpeg ✔, libpng ✔, freetype ✔
Optional: fontconfig ✘, libtiff ✘, little-cms ✘, little-cms2 ✘, libwmf ✘, librsvg ✘, liblqr ✘, openexr ✘, ghostscript ✘, webp ✘, fftw ✘
==> Options
--enable-hdri
    Compile with HDRI support
--with-fftw
    Compile with FFTW support
--with-fontconfig
    Build with fontconfig support
--with-ghostscript
    Build with ghostscript support
--with-jp2
    Compile with Jpeg2000 support
--with-liblqr
    Build with liblqr support
--with-librsvg
    Build with librsvg support
--with-libtiff
    Build with libtiff support
--with-libwmf
    Build with libwmf support
--with-little-cms
    Build with little-cms support
--with-little-cms2
    Build with little-cms2 support
--with-openexr
    Build with openexr support
--with-perl
    enable build/install of PerlMagick
--with-quantum-depth-16
    Compile with a quantum depth of 16 bit
--with-quantum-depth-32
    Compile with a quantum depth of 32 bit
--with-quantum-depth-8
    Compile with a quantum depth of 8 bit
--with-webp
    Build with webp support
--with-x11
    Build with x11 support
--without-freetype
    Build without freetype support
--without-jpeg
    Build without jpeg support
--without-libpng
    Build without libpng support
--without-magick-plus-plus
    disable build/install of Magick++
--HEAD
    Install HEAD version

提前致谢

我在使用 rmagick 2.13.4 的 OSX 10.10.2 (Yosemite) 上遇到了同样的错误。 该问题已在最新代码中修复。请参阅下面的问题。

不过,新版本还没有正式发布,所以我用上面的代码在本地修复了这个问题。

$ git clone -b RMagick_2-13-4 git://github.com/gemhome/rmagick.git

合并修复代码(替换ext/RMagick/rmmain.c中的相关代码).

#if defined(HAVE_GETMAGICKFEATURES)
  // 6.5.7 - latest (7.0.0)
  features = rb_str_new2(GetMagickFeatures());
#elif defined(MagickFeatures)
  // 6.5.7 - latest (7.0.0)
  features = rb_str_new2(MagickFeatures);
#elif defined(MagickSupport)
  // 6.5.5 - 6.5.6
  features = rb_str_new2(MagickSupport);
#else
  features = rb_str_new("unknown",7);
#endif

然后安装。

$ cd rmagick/
$ gem build rmagick.gemspec
$ gem install --local rmagick-2.13.4.gem 
Building native extensions.  This could take a while...
Successfully installed rmagick-2.13.4
1 gem installed

希望对您有所帮助。