编译mupdf的ios版

戴维营教育原创文章,转载请注明出处。我们的梦想是做最好的iOS开发培训!

MuPDF是一个强大的开源PDF框架,支持GPL和商业授权。下载地址: bash git clone --recursive git://git.ghostscript.com/mupdf.git

最简单的方法是在platform/ios目录中打开MuPDF项目,然后选择合适的架构就可以直接编译运行了(可能要设置SDK版本)。它会自动运行该目录下面的build_libs.sh脚本进行libmupdf.a等静态库,然后存放在刚才下载下来的mupdf目录中的build文件夹下。而头文件则存放在mupdf/include中。

diveinedu $ pwd
/Users/diveinedu/opensource/mupdf
dieveinedu $ tree -L 1
.
├── CHANGES
├── CONTRIBUTORS
├── COPYING
├── Makefile
├── Makerules
├── Makethird
├── README
├── build
├── docs
├── generated
├── include
├── platform
├── resources
├── scripts
├── source
└── thirdparty
注意:

2015年10月5日开始,mupdf使用的OpenGL库从GLUT切换到GLFW,而GLFW不支持iOS,因此编译中会出现找不到OpenGL/gl.h的错误。可以切换回之前的老版本:

查看日志:
$ git log
commit 83a00b0a38558e3e64f38d8a584808e323f4d706
Author: Tor Andersson <tor.andersson@artifex.com>
Date:   Fri Aug 21 2015 21:22:21 GMT+0800 (CST)

    gl: Use GLFW instead of GLUT.

    Add OpenGL text rendering using textured quads, instead of using glut bitmap fonts.
切换版本
$ git reset 22cfd27 --hard
$ git clean
附加信息

如果不想使用Xcode进行编译,可以直接在mupdf目录下运行xcodebuild命令。 bash xcodebuild -project platform/ios/MuPDF.xcodeproj -target MuPDF

如果希望将不同架构的二进制放置在同一个.a文件中,可以使用lipo进行合并。

$ mkdir product
$ lipo debug-ios-x86_64/libcurl.a release-ios-armv7-arm64/libcurl.a -create -output product/libcurl.a
$ lipo debug-ios-x86_64/libjpeg.a release-ios-armv7-arm64/libjpeg.a -create -output product/libjpeg.a
$ lipo debug-ios-x86_64/libopenjpeg.a release-ios-armv7-arm64/libopenjpeg.a -create -output product/libopenjpeg.a
$ lipo debug-ios-x86_64/libfreetype.a release-ios-armv7-arm64/libfreetype.a -create -output product/libfreetype.a
$ lipo debug-ios-x86_64/libmujs.a release-ios-armv7-arm64/libmujs.a -create -output product/libmujs.a
$ lipo debug-ios-x86_64/libz.a release-ios-armv7-arm64/libz.a -create -output product/libz.a
$ lipo debug-ios-x86_64/libjbig2dec.a release-ios-armv7-arm64/libjbig2dec.a -create -output product/libjbig2dec.a
$ lipo debug-ios-x86_64/libmupdf.a release-ios-armv7-arm64/libmupdf.a -create -output product/libmupdf.a

最后用lipo查看一下是否合并成功。 bash $ lipo -info mupdf/lib/libmupdf.a Architectures in the fat file: build/mupdf/lib/libmupdf.a are: armv7 x86_64 arm64

参考资料

1. 增加bitcode支持

2. question-ios-library-to-bitcode

3. develop-an-ebook-reader-on-iphone-ipad-using-mupdf-library

戴维营学院(高级开发视频): http://v.diveinedu.com

潜心俱乐部(iOS面试必备): http://divein.club