杨子刚的博客


mupdf编译

2015-01-11

mupdf是一个轻量级的pdf、xps查看器。

下面记录了笔者在Mac OS X Yosemite` 10.10.1下编译过程中遇到的问题。

首先下载代码

git clone --recursive git://git.ghostscript.com/mupdf.git

在mupdf目录下执行make命令,最后会因为找不到X11的头文件而出错退出。

platform/x11/x11_main.c:3:10: fatal error: 'X11/Xlib.h' file not found

这时候需要安装软件XQuartz。安装完该软件后,执行make就会成功。 这时候可以使用./build/debug/mupdf-x11这个命令行工具查看pdf文件。

doc目录下有一个example.c文件,展示了基本的用法,可以通过以下命令来编译。

#在mupdf源代码目录下执行该命令
gcc -g -o build/debug/example -Iinclude docs/example.c \
     build/debug/libmupdf.a \
     build/debug/libfreetype.a build/debug/libjbig2dec.a \
     build/debug/libjpeg.a build/debug/libopenjpeg.a \
     build/debug/libmujs.a \
     build/debug/libz.a -lm

在使用这个命令编译时,会提示错误:

ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

出这个错误是因为编译时没有引入openssl的库。先使用port安装openssl:

sudo port install openssl

再编译:

#在mupdf源代码目录下执行该命令
gcc -g -o build/debug/example -Iinclude docs/example.c \
     build/debug/libmupdf.a \
     build/debug/libfreetype.a build/debug/libjbig2dec.a \
     build/debug/libjpeg.a build/debug/libopenjpeg.a \
     build/debug/libmujs.a \
     build/debug/libz.a -lm \
     -lssl -lcrypto

在build/debug目录下就会生成可执行文件example

./example /path/to/some.pdf

该命令会生成som.pdf第一页对应的图片。

mupdf包含了Android、iOS项目。如果需要编译Android项目,先要在platform/android下面执行ndk-build,便会在libs下面生成so库文件,该命令根据jni/Application.mk内APP_ABI的值可分别生成对应于armeabi、armeabi-v7a、x86_64、mips四个平台的so文件。