[关闭]
@yibo 2015-07-03T05:08:15.000000Z 字数 2776 阅读 1680

Mac OS X 安装JMagick

Mac OSX JMagick


因为项目用到了JMagick处理图片,以前都是在服务器(CentOS)上玩,安装配置起来毫无压力。现在想搞个本地环境来DEBUG,没想到在Mac上折腾了半天才搞好。现记录一下,免得以后重装时忘了。

1. Homebrew

用brew安装既方便管理,又能避免手动编译安装的一些错误,所以只要能再brew上找到的都用它安装了。brew的安装参考Homebrew官网

2. ImageMagick

有了brew后,这玩意也就好安装了,brew会自动安装它的依赖(libpng、jpeg、freetype等等)。千万不要再去下源码包编译安装了,我半天的时间都是耗在这上边了,解决了一个错误又出一个错误。(真要源码安装的话,要先安装libpng、jpegsrc、freetype、zlib这些,再编译ImageMagick,否则都是徒劳)

3. JMagick

这才是关键,问题最多也是它了。brew上没有这个,所以只能自己手动编译安装了。(github上有人提供了个Formula但未被收纳,有兴趣的可以自己试试Formula for jmagick - 1Formula for jmagick - 2
首先从www.jmagick.org下载最新的版本(从09年它的版本号就定格6.4.0了)

  1. tar -xzvf jmagick-6.4.0-src.tar.gz
  2. cd 6.4.0
  3. ./configure --with-java-home=`/usr/libexec/java_home` --with-java-includes=/System/Library/Frameworks/JavaVM.framework/Headers

其中,--with-java-includes=/System/Library/Frameworks/JavaVM.framework/Headers是指定jni.h包头,不指定的话会报错:

  1. configure: error: 'Unable to locate jni.h'

另外还可能出现错误:

  1. checking for MagickCore-config... /usr/local/bin/MagickCore-config
  2. /usr/local/bin/MagickCore-config: line 50: pkg-config: command not found
  3. /usr/local/bin/MagickCore-config: line 53: pkg-config: command not found
  4. /usr/local/bin/MagickCore-config: line 47: pkg-config: command not found
  5. checking magick/api.h usability... no
  6. checking magick/api.h presence... no
  7. checking for magick/api.h... no
  8. configure: error: 'Unable to find ImageMagick header files'

用brew安装一下pkg-config就好了
然后

  1. make
  2. sudo make install

make的时候如果出现这个错误

  1. make[1]: Entering directory `/Users/yibo/Downloads/6.4.0/src'
  2. make[2]: Entering directory `/Users/yibo/Downloads/6.4.0/src/magick'
  3. ../../Make.rules:175: *** missing separator. Stop.
  4. make[2]: Leaving directory `/Users/yibo/Downloads/6.4.0/src/magick'
  5. make[1]: *** [dir_target] Error 2
  6. make[1]: Leaving directory `/Users/yibo/Downloads/6.4.0/src'
  7. make: *** [dir_target] Error 2

编辑一下Make.role文件的第175和176行,将开头的4个空格换为一个tab就好了

安装完成后去/usr/local/lib看一下是否有以下三条记录:
- jmagick-6.4.0.jar
- libJMagick-6.4.0.so
- libJMagick.so
由于JMagick已经好几年不更新了,它编译出来的文件还是.so,将它copy一份改为libJMagick-6.4.0.dylib

  1. sudo cp libJMagick-6.4.0.so libJMagick-6.4.0.dylib

或者直接改它的软连接

  1. sudo cp libJMagick.so libJMagick.dylib

到此已经OK了,可以写个程序简单测试一下。
如果出现类似

  1. java.lang.UnsatisfiedLinkError: /usr/local/lib/libJMagick-6.4.0.so: dlopen(/usr/local/lib/libJMagick-6.4.0.so, 1): Library not loaded: /usr/local/lib/libMagickWand.1.dylib
  2. Referenced from: /usr/local/lib/libJMagick-6.4.0.so
  3. Reason: image not found
  4. at java.lang.ClassLoader$NativeLibrary.load(Native Method)
  5. ...

错误的,按照它要的名字去/usr/local/lib下创建相应的软连接就行了。比如上面的就执行

  1. cd /usr/local/lib
  2. ln -s ../Cellar/imagemagick/6.9.1-6/lib/libMagickWand-6.Q16.dylib libMagickWand.1.dylib

4. JVM参数

出现no JMagick in java.library.path错误的话,可以在程序里直接设置

System.setProperty("java.library.path", "/usr/local/lib");

或加启动参数

-Djava.library.path=/usr/local/lib

Tomcat可以在${CATALINA_HOME}/bin中向setenv.sh加入

CATALINA_OPTS="-Djava.library.path=/usr/local/lib -Djmagick.systemclassloader=false"
JAVA_OPTS="-Djava.library.path=/usr/local/lib -Djmagick.systemclassloader=false"
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注