RMagick安装:找不到MagickWand.h

188

更新RMagickImagemagick是一件痛苦的经历。我使用homebrew将我的Mac(MacOS El Capitan Version 10.11.5)上的Imagemagick版本从Ruby 2.3更新到6.9.5-9,只为了一个项目。

$ convert --version
Version: ImageMagick 6.9.5-9 Q16 x86_64 2016-09-09

现在,一个使用 Ruby 1.8.7 的旧项目出现了错误信息 "this installation of RMagick was configured with ImageMagick 6.8.9 but ImageMagick 6.9.5-9 is in use"。因此,我卸载了 "rmagick",但无法重新安装。

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

checking for /usr/local/opt/gcc46/bin/gcc-4.6... yes
checking for Magick-config... yes
checking for outdated ImageMagick version (<= 6.4.9)... no
checking for presence of MagickWand API (ImageMagick version >= 6.9.0)... no
checking for Ruby version >= 1.8.5... yes
checking for stdint.h... no
checking for sys/types.h... no
checking for wand/MagickWand.h... no

Can't install RMagick 2.16.0. Can't find MagickWand.h. 

如果无法安装RMagick,整个应用程序将无法启动。我尝试了来自这里的所有答案,但在MacOS上没有一个有效:-( 我使用Homebrew重新安装了imagemagick和pkg-config,并尝试了各种版本的RMagick,但都没有成功。目前2.16.0是RMagick的最新版本。
MagicWand似乎在ImageMagick版本大于6.9时被使用,并且可以在计算机上找到。
find /usr/local -name MagickWand.h
=> /usr/local/Cellar/imagemagick/6.9.5-9_1/include/ImageMagick-6/wand/MagickWand.h

find /usr/local -name MagickWand.pc
=> /usr/local/Cellar/imagemagick/6.9.5-9_1/lib/pkgconfig/MagickCore.pc

即使我在gem安装过程中指定了这些路径(与上面相同的错误),它仍然无法正常工作:-(

C_INCLUDE_PATH=/usr/local/Cellar/imagemagick/6.9.5-9_1/include/ImageMagick-6 PKG_CONFIG_PATH=/usr/local/lib/pkgconfig gem install rmagick

更新:

这个错误只会在 Ruby 1.8.7 上出现,可以安装 RMagick 的 Ruby 2.0 和 Ruby 2.3 版本。Ruby 1.8.7 和 ImageMagick 6.9.5 似乎不兼容。

  • Ruby 1.8.7 ×
  • Ruby 2.0.0 ✓
  • Ruby 2.3.1 ✓

https://dev59.com/klgR5IYBdhLWcg3wJ6tw - ohho
1
这是什么,哈利波特游戏吗? - lmat - Reinstate Monica
1
@LimitedAtonement 显然是的 :-) - 0x4a6f4672
21个回答

519

解决在 Mac OSX Sierra, High Sierra, El Capitan, Mojave, Catalina, Big Sur, and Monterey (M1 chip) 中的问题,您可以采取以下步骤:

brew unlink imagemagick
brew install imagemagick@6 && brew link imagemagick@6 --force

imagemagick@6keg-only 的,所以你需要强制链接。


8
在连接之前,我不得不手动取消关联brew unlink imagemagick,但这样做起作用了。非常感谢。 - Haris Krajina
2
哇,太糟糕了,我不能使用最新版本的ImageMagick,但这个可以用。谢谢! - Fomentia
1
可以完美地在Ubuntu上工作,适用于Ubuntu 16.04.3 LTS。 - violentr
4
适用于Big Sur操作系统! - bad_kotya
2
适用于搭载 Monterey 的 Apple M1。 - Mik
显示剩余3条评论

57

哇!非常感谢您提供的链接。我浪费了将近半天的时间来解决这个问题。 - Harshad Kale
16
请注意,imagemagick@6是仅限于Keg的,因此您需要强制链接。对我而言,“brew install imagemagick@6 && brew link imagemagick@6 --force”解决了这个问题。 - Darren Cheng
1
太棒了,干杯!这对我有效:brew install --force imagemagick@6 && brew link imagemagick@6 --force - Bella
1
是的,安装先前版本(6x)肯定会解决这个问题。问题在于,imagemagick文件夹结构在7x版本中发生了变化。而在安装gem时,它假定6x具有的文件夹结构。 - Prakash Raman
很遗憾,回滚到ImageMagick@6对我不起作用。即使重新安装和重新链接后,当我尝试安装rmagick时仍然会收到以下错误消息:`Using 6.9.8 Q16 from /usr/local/Cellar/imagemagick@6/6.9.8-3.checking for outdated ImageMagick version (<= 6.4.9)... yes checking for Ruby version >= 1.8.5... yes checking for stdint.h... no checking for sys/types.h... no checking for wand/MagickWand.h... noCan't install RMagick 2.15.0. Can't find MagickWand.h.` - Will Hitchcock

33

macOS Sierra:

brew uninstall imagemagick
brew install imagemagick@6
brew link imagemagick@6 --force

2
-1是因为你没有任何理由强制链接,也没有告诉任何人为什么这不是一个好主意。请参考我的答案,以Homebrew的方式“正确”地完成,而不是使用MacPorts。 - mmlac

23

首先,通过使用以下命令取消链接未正确安装在最新的macOS High Sierra中的ImageMagick。

brew unlink imagemagick

然后使用以下命令安装最新的imagemagick6

brew install imagemagick@6 && brew link imagemagick@6 --force

然后使用以下命令安装gem rmagick

gem install rmagick 

它将完美地工作。


18

是的,这个解决了我的问题:

MacOS X Sierra:

brew uninstall imagemagick
brew install imagemagick@6
brew link imagemagick@6 --force

14

ImageMagick 7发生了很多变化,路径也有所不同:include/.../wand,而wand/MagickWand.h目前在rmagic gem中是硬编码的。在我的情况下,由于该项目相当古老,无法更新gem版本。因此,我最终安装了旧版的ImageMagic。

您可以从6.x.x安装最新版本:

brew install https://raw.githubusercontent.com/Homebrew/homebrew-core/6f014f2b7f1f9e618fd5c0ae9c93befea671f8be/Formula/imagemagick.rb

您还可以将其固定以供以后使用:brew pin imagemagick


1
对我来说有效:Mac OS 10.12.X。我首先安装了ImageMagick 7,然后在安装rails gem rmagick时遇到了问题。 - Simon Franzen

12

ImageMagick 7.0.4-4 的一些变化导致我找不到 wand/MagickWand.h 文件了:

% brew unlink imagemagick && brew link imagemagick
Unlinking /usr/local/Cellar/imagemagick/7.0.4-4... 71 symlinks removed
Linking /usr/local/Cellar/imagemagick/7.0.4-4... 71 symlinks created
% gem install rmagick
Building native extensions.  This could take a while...
ERROR:  Error installing rmagick:
    ERROR: Failed to build gem native extension.

    /Users/holger/.rbenv/versions/2.2.2/bin/ruby -r ./siteconf20170116-21103-1aikaka.rb extconf.rb
checking for clang... yes
checking for Magick-config... no
checking for pkg-config... yes
checking for outdated ImageMagick version (<= 6.4.9)... no
checking for presence of MagickWand API (ImageMagick version >= 6.9.0)... no
checking for Ruby version >= 1.8.5... yes
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.16.0. Can't find MagickWand.h.

我系统上还安装有ImageMagick 6.9.7-3版本,我使用以下命令切换回该版本:

% brew switch imagemagick 6.9.7-3
Cleaning /usr/local/Cellar/imagemagick/6.9.6-6
Cleaning /usr/local/Cellar/imagemagick/6.9.7-0
Cleaning /usr/local/Cellar/imagemagick/6.9.7-1
Cleaning /usr/local/Cellar/imagemagick/6.9.7-3
Cleaning /usr/local/Cellar/imagemagick/7.0.4-4
75 links created for /usr/local/Cellar/imagemagick/6.9.7-3

随后,我可以轻松安装rmagick

% gem install rmagick
Building native extensions.  This could take a while...
Successfully installed rmagick-2.16.0
1 gem installed

你能找到任何解决方案吗?我也遇到了和你一样的问题。 - Kemal Akkoyun
就像我所说的那样,切换回 ImageMagick 6.9 对我来说可以解决此问题。 - Holger Frohloff
1
谢谢,我已经明白了并根据您的建议进行了修复。但是我想问一下,您是否使用最新的ImageMagick版本解决了它?然后我发现了相关问题https://github.com/rmagick/rmagick/issues/256,也建议像您一样降级ImageMagick。再次感谢。 - Kemal Akkoyun
非常欢迎。我还没有使用7.x版本解决问题。我猜很快就会有修复。我们拭目以待。 :) - Holger Frohloff

9

RMagick依赖于一个过时的imagemagick版本,即版本6。(见下文) Homebrew将其作为一个只能桶包提供,你可以用以下命令进行安装:

brew install imagemagick@6

构建输出将包括一个 Caveats(注意事项)部分(如果您清除了输出,则也可以从 brew info imagemagick@6 获得)。
==> Caveats
imagemagick@6 is keg-only, which means it was not symlinked into /usr/local,
because this is an alternate version of another formula.

If you need to have imagemagick@6 first in your PATH run:
  echo 'export PATH="/usr/local/opt/imagemagick@6/bin:$PATH"' >> ~/.zshrc

For compilers to find imagemagick@6 you may need to set:
  export LDFLAGS="-L/usr/local/opt/imagemagick@6/lib"
  export CPPFLAGS="-I/usr/local/opt/imagemagick@6/include"

For pkg-config to find imagemagick@6 you may need to set:
  export PKG_CONFIG_PATH="/usr/local/opt/imagemagick@6/lib/pkgconfig"

不要使用强制链接,这可能会导致其他支持新版本ImageMagick的软件出现问题。相反,您可以使用建议的export将RMagick gem指定为使用旧版本来构建:

export LDFLAGS="-L/usr/local/opt/imagemagick@6/lib"
export CPPFLAGS="-I/usr/local/opt/imagemagick@6/include"
export PKG_CONFIG_PATH="/usr/local/opt/imagemagick@6/lib/pkgconfig"
gem install rmagick

  1. 如果你懂得Ruby和C语言,可以帮助升级RMagick!

7

安装imagemagick 6版本,因为7版本不兼容:

$ brew install imagemagick@6

不应该强制链接旧版本,因为这会改变您路径中的二进制文件,而brew doctor会发出警告。

在构建gem的本地扩展时,请引用从版本6安装的头文件和库:

$ PKG_CONFIG_PATH=/usr/local/Cellar/imagemagick@6/6.9.10-14/lib/pkgconfig/ gem install rmagick -v '2.16.0'

注意:对我来说没有指定lib和include文件夹也可以工作,因为pkgconfig负责此项任务。

注意:6.9.10-14是imagemagick@6的最新版本,但如果需要使用不同的版本,则可以随意更改。


5
请按照以下步骤进行操作,并根据您的需求更改部分内容。
brew unlink imagemagick
brew install imagemagick@6 && brew link imagemagick@6 --force
export PKG_CONFIG_PATH=/usr/local/Cellar/imagemagick@6/6.9.9-24/lib/pkgconfig
gem install rmagick -v '2.15.4'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接