ruby - Instalação do RMagick: não é possível encontrar o MagickWand.h




macos imagemagick (14)

Atualizar o RMagick e o Imagemagick é uma experiência dolorosa. Eu atualizei a versão do Imagemagick no meu mac (MacOS El Capitan Versão 10.11.5) com homebrew para um projeto em Ruby 2.3 a 6.9.5-9

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

Agora um projeto mais antigo no Ruby 1.8.7 se recusa a trabalhar com a mensagem de erro "esta instalação do RMagick foi configurada com o ImageMagick 6.8.9, mas o ImageMagick 6.9.5-9 está em uso". Assim eu desinstalei "rmagick", mas não pode ser instalado novamente

$ 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. 

E se não puder ser instalado, o aplicativo inteiro não poderá ser iniciado. Eu tentei todas as respostas a partir here , e nenhum deles funciona em MacOS :-( Eu reinstalei o imagemagick e pkg-config com homebrew, e tentei várias versões do RMagick sem sucesso. 2.16.0 é a versão mais recente do RMagick atualmente.

O MagicWand parece ser usado na versão do ImageMagick> 6.9, e pode ser encontrado na máquina:

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

Não funciona mesmo se eu especificar estes caminhos durante a instalação gem (mesmo erro acima) :-(

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

ATUALIZAR:

O erro ocorre apenas para o Ruby 1.8.7, é possível instalar o RMagick para Ruby 2.0 e Ruby 2.3. O Ruby 1.8.7 e o ImageMagick 6.9.5 não parecem ser compatíveis.

  • Ruby 1.8.7 x
  • Ruby 2.0.0 ✓
  • Rubi 2.3.1 ✓

Algo estava gravemente errado no meu sistema, tanto que estava completamente errado, mas finalmente consegui instalar o RMagick para o Ruby 1.8.7 novamente depois que instalei

A instalação de uma nova versão Ruby com o RVM rvm install 1.8.7 também instalou um novo compilador GCC: ele removeu uma versão anterior do GCC 4.6 e instalou a versão 4.9 do GCC. Aparentemente o GCC não conseguiu encontrar os cabeçalhos certos apesar do pkg-config.


Algo mudou com o ImageMagick 7.0.4-4 para mim. wand/MagickWand.h não pôde mais ser encontrado:

% 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.

Eu ainda tinha ImageMagick 6.9.7-3 no meu sistema e mudou de volta com

% 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

Depois eu poderia instalar o rmagick sem problemas:

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

Aqui está como eu resolvi (depois de muitas tentativas e falhar) no macOS High Sierra 10.13.3 com Homebrew:

  1. parece que RMagick 2.16.0 não é compatível com a versão mais recente do ImageMagick (versão 7): http://wordsandmagic.com/2017/09/01/RMagick-2-16-0-Error-MagickWand
  2. Eu desinstalei o imagemagick: brew uninstall imagemagick
  3. Então eu instalei Imagemagick com esta fórmula: https://gist.github.com/JagdeepSingh/4b03cbeab16cc0bc729bbc6d275402d3
  4. gem install rmagick

Se você já instalou uma versão antiga do Imagemagick, isso deve funcionar: share


Eu ainda não tenho a reputação de deixar isso como um comentário para melhorar outra resposta, mas a resposta do @ Evgeniy28 funcionou para mim na Sierra somente depois de instalar o pkg-config, que não vem instalado por padrão em uma nova máquina Sierra.

Assim:

brew install pkg-config
brew uninstall imagemagick
brew install [email protected]
brew link [email protected] --force

Sucesso:

$ gem install rmagick
Building native extensions.  This could take a while...
Successfully installed rmagick-2.16.0
Parsing documentation for rmagick-2.16.0
Installing ri documentation for rmagick-2.16.0
Done installing documentation for rmagick after 4 seconds
1 gem installed


Instale o imagemagick versão 6 porque a versão 7 não é compatível:

$ brew install [email protected]

Não deve vincular - force a versão mais antiga porque isso irá mudar os binários em seu caminho e o bom brew doctor irá reclamar.

Consulte os cabeçalhos e bibliotecas da versão 6 que foi instalada ao criar a extensão nativa da gem:

$ PKG_CONFIG_PATH=/usr/local/Cellar/[email protected]/6.9.10-14/lib/pkgconfig/ gem install rmagick -v '2.16.0'

Nota: Trabalhei para mim sem indicar a pasta lib e include porque o pkgconfig é responsável por isso.

Nota: 6.9.10-14 é a versão mais recente do imagemagick @ 6, mas sinta-se à vontade para alterá-lo se precisar usar uma versão diferente


Muitas coisas mudaram no ImageMagick 7 como este caminho: include/.../wand , e wand/MagickWand.h é hardwired na gema rmagic no momento. No meu caso, não foi possível atualizar a gema, pois o projeto é bastante antigo. Então acabei instalando uma versão mais antiga do ImageMagic.

Você pode instalar a última versão do 6.xx:

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

Você também pode fixá-lo para uso posterior: brew pin imagemagick



Obteve o mesmo erro para a compilação da imagem alpina 3.9. Ele vem com o ImageMagick 7.0.8.38-r0

Para consertar isso, você usa o alpine 3.5 com o ImageMagick 6.9.6.8-r1 :

FROM alpine:3.5

Ou instale o ImageMagick 6.9.6.8-r1 com repositório de pacotes para 3.5:

RUN apk add imagemagick-dev=6.9.6.8-r1 --repository http://dl-3.alpinelinux.org/alpine/v3.5/main/

github.com/rmagick/rmagick/issues/256 em github.com/rmagick/rmagick/issues/256 no repositório rmagick em relação a construções com falha para o ImageMagick 7.0.x. então esperamos que seja corrigido em breve.


Para a versão do Ubuntu> 12 e não usando homebrew,

wget http://www.imagemagick.org/download/<required_imagemagick_version>
tar -xvf <path_to_your_downloaded_file>.tar.gz

Se você estiver obtendo arquivos '7z' em vez de arquivos 'tar.gz' no link wget, então

7z x <path_to_your_downloaded_file>.7z
cd <path_to_your_downloaded_file>/
make
./configure
sudo make install
sudo ldconfig /usr/local/lib

Então você pode retomar seu bundler para o RMagick.


Por favor, siga abaixo e mude alguma parte de acordo com sua necessidade.

brew unlink imagemagick
brew install [email protected] && brew link [email protected] --force
export PKG_CONFIG_PATH=/usr/local/Cellar/[email protected]/6.9.9-24/lib/pkgconfig
gem install rmagick -v '2.15.4'

Primeiro, você não precisa desinstalar o imagemagick se ele tiver um 6.x instalado, como mostrado abaixo. Você pode ver que o "main" atual é 7.0.7-8 mas o 6.9.1-10 ainda está lá.

$ brew info imagemagick                                                            
imagemagick: stable 7.0.7-8 (bottled), HEAD
Tools and libraries to manipulate images in many formats
https://www.imagemagick.org/
/usr/local/Cellar/imagemagick/6.9.1-10 (1,450 files, 17.5MB)
  Poured from bottle on 2015-07-26 at 09:10:58
/usr/local/Cellar/imagemagick/7.0.6-9 (1,522 files, 22.8MB)
  Poured from bottle on 2017-08-21 at 14:44:16
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula

Se você não tiver uma versão 6.x antiga, instale o imagemagick @ 6.

Em segundo lugar, não force link imagemagick, especialmente não 6. EDIT: Veja ¹
Você precisa definir PKG_CONFIG_PATH além dos sinalizadores --with-opt- *.

Isso funciona para mim no High Sierra com a configuração de brew acima no Ruby 1.9.3-p551:

PKG_CONFIG_PATH=/usr/local/Cellar/imagemagick/6.9.1-10/lib/pkgconfig  \
  gem install rmagick -v '2.16.0' -- \
  --with-opt-lib=/usr/local/Cellar/imagemagick/6.9.1-10/lib/ \
  --with-opt-include=/usr/local/Cellar/imagemagick/6.9.1-10/include/ImageMagick-6/

Construir o ri docs falha, mas estes são irrelevantes.

¹: Obras de construção, o caminho do dylib que o RMagick está pesquisando está errado. Problema levantado # 278 para esclarecer se isso pode ser corrigido. Caso contrário, o symlinking manual do libMagickWand etc é necessário. Pode ainda ser mais seguro vincular manualmente as bibliotecas específicas do que um brew link --force .



$ brew remove imagemagick && brew install imagemagick

$ brew uninstall pkg-config && brew install pkg-config
$ brew unlink pkg-config && brew link pkg-config

$ gem install rmagick




rmagick