可恶的 GraphicsMagick

今天在用 GraphicsMagick (简写 gm) 处理 jpeg 的时候,不幸遇到了这个错误:
Wrong JPEG library version: library is 62, caller expects 80

出现这个情况,是由系统的 libjpeg 版本号和 gm 调用的不一致而导致的。

解决方法,无非就是安装对应的 libjpeg 和 gm。

解决步骤

  1. 把 /usr/local/lib 和 /usr/lib64 中的 libjpeg* 全部删除,避免版本冲突

    rm -r /usr/local/lib/libjpeg*
    rm -r /usr/lib64/libjpeg*
  2. 删除系统现有的 libjpeg 和 libjpeg-turbo 库

    rpm -qa | grep libjpeg  # 检查是否有 libjpeg 库
    rpm -qa | grep libjpeg | xargs rpm -e --nodeps --allmatches # 有的都删掉
  3. 下载 libjpeg 源码
    由于错误提示是要80版本,所以建议下载 libjpeg.8.x。
    下载地址:ftp://ftp.graphicsmagick.org/pub/GraphicsMagick/delegates/jpegsrc.v8d.tar.gz

  4. 编译安装 libjpeg

    tar -zxvf jpegsrc.v8d.tar.gz
    cd jpeg-8d
    ./configure
    make && make install
  5. 将 libjpeg 添加到 /usr/lib64 中
    默认编译安装的位置是 /usr/local/lib,但 gm 会检查 /usr/lib64 位置的 libjpeg,所以创建一个软链接。

    cd /usr/lib64
    ln -s /usr/local/lib/libjpeg.so.8.4.0 libjpeg.so.8
  6. 下载和编译安装 GraphicsMagick
    可以选择 GraphicsMagick 1.3.20,编译安装的方式与步骤 4 类似。
    安装好后,运行 gm version 查看版本。

运行不了 gm?

如果输入上述代码显示 command not found 的话,可以手动地在安装包中找出 gm 文件,并复制到 /usr/local/lib 中。参考命令:

find . -name 'gm'
cp [SOURCE_LOCATION] /usr/local/lib/gm