PODOFO编译之依赖项编译及podofo-0.9.2编译
http://svn.code.sf.net/p/podofo/code/podofo/trunk SVN
http://podofo.sourceforge.net/doc/html/index.html DOC
http://podofo.sourceforge.net/download.html DOWNLOAD
在podofo-0.9.2中,ZLIB和OpenSSL是必须的,其他的可选,本例仅选重要的几个依赖项进行编译。本例是参照下面两个链接中的文章进行的,内容也无所变更,只是版本不同,但鉴于亲自动手操作亦有必要作下笔记,故记于此。
http://blog.csdn.net/zxxssdsd/article/details/9454629
http://blog.csdn.net/xing2005112117/article/details/6291025
整个项目可在下面的360网盘分享链接中下载,由于文件较大无法在同一文件夹中共享,因此分割成了两个两个文件夹:PDFDev1和PDFDev2,1中的是podofo项目,包括编译后的VS2010解决方案及其中各个项目的debug和release版本可执行文件;2中是其他的依赖项的库和头文件,将两个下载后合并到PDFDev文件夹中接口用VS2010进行正常操作,其中的一些配置因为是CMake自动生成,所以如果不是将PDFDev保存到D盘根目录下,则需要更改属性配置。
http://yunpan.cn/QDMw3SgyZCpGF (PDFDev1)
http://yunpan.cn/QDMwNp5D3Fiu3 (PDFDev2)
下面步骤中所需的全部源码或安装包可以在 http://download.csdn.net/detail/yaoyuanyylyy/6757975 中下载,或者在我的360网盘分享中http://yunpan.cn/QDMQjkpkn3hBt下载。
更新更正确的编译版请参看:http://blog.csdn.net/yaoyuanyylyy/article/details/17757677
一、jpeg9
1. 在http://www.ijg.org网址下载jpeg,或直接使用链接http://www.ijg.org/files/jpegsr9.zip下载,然后解压到D:\PDFDev目录下。
2. 在VS命令行提示符下进入到D:\PDFDev\jpeg-9目录,然后执行下面的命令,则可在该目录中生成libjpeg.lib文件。
> copy jconfig.vc jconfig.h // CMake构建时必须要.h文件
> vsvars32.bat //设置环境
> nmake /f makefile.vc /a // debug版本
> nmake nodebug=1 /f makefile.vc /a // release版本
二、zlib 1.2.8
1. 在http://zlib.net下载zlib源码解压到D:\PDFDev目录下,当然也可直接下载编译版本来使用。
2. 在VS命令行提示符中进入到D:\PDFDev\zlib-1.2.8目录,然后运行下面的命令则可在该目录下生成所需的库文件。
>nmake -f win32/Makefile.msc
三、tiff 3.8.2
1. 在http://nchc.dl.sourceforge.net/project/gnuwin32/tiff/3.8.2-1/tiff-3.8.2-1-src.zip或http://www.libtiff.org/下载tiff源码,解压到D:\PDFDev目录下。
2. 进入到tiff源码目录D:\PDFDev\tiff-3.8.2-1-src\src\tiff\3.8.2\tiff-3.8.2-src下,修改nmake.opt文件,添加JPEG和ZLIB配置:
……
# Uncomment and edit following lines to enable JPEG support.
#
JPEG_SUPPORT = 1
JPEGDIR =D:/PDFDev/jpeg-9
JPEG_INCLUDE = -I$(JPEGDIR)
JPEG_LIB = $(JPEGDIR)/libjpeg.lib
……
#
# Uncomment and edit following lines to enable ZIP support
# (required for Deflate compression and Pixar log-format)
#
ZIP_SUPPORT = 1
ZLIBDIR = D:/PDFDev/zlib-1.2.8
ZLIB_INCLUDE = -I$(ZLIBDIR)
ZLIB_LIB =$(ZLIBDIR)/zlib.lib
……
3. 在VS命令行提示符中进入D:\PDFDev\tiff-3.8.2-1-src\src\tiff\3.8.2\tiff-3.8.2-src目录,执行下面的命令,便可以生成所需的库文件(命令执行的最后有一些链接错误,暂时忽略):
>nmake /f makefile.vc
四、FreeType 2.5.2
1. 在http://sourceforge.net/projects/freetype/files/或http://www.freetype.org/中下载ft252.zip,解压到D:\PDFDev目录下。
2. 在vs2010中打开D:\PDFDev\freetype-2.5.2\builds\windows\vc2010\freetype.sln,然后分别在debug multithreaded和release multithreaded模式下生成(生成——>配置管理器——>活动解决方案——>选择)。这时,在D:\PDFDev\freetype-2.5.2\objs下就会生成debug_mt和release_mt两个文件夹,在D:\PDFDev\freetype-2.5.2\objs\win32\vs2010下面生成freetype252MT.lib和freetype252MT_D.lib两个库文件,将debug_mt文件夹中的vc100.pdb(使VC++能够找到freetype的调试信息)文件复制到lib库的目录下。
五、lpng167
1. 在http://sourceforge.net/projects/libpng/files/libpng16/1.6.7/或http://libpng.sourceforge.net/index.html中下载lpng167.zip,解压到D:\PDFDev目录下。
2. 在VS2010中打开D:\PDFDev\lpng167\projects\vstudio\vstudio.sln,因为要使用自己下载的zlib,所以需要在”解决方案--->属性--->通用属性--->项目依赖项”中去掉libpng对zlib的依赖。
3. 在”libpng项目--->属性--->配置属性--->vc++目录”中添加zlib库的lib(库目录)和include路径(包含目录);并在链接器à输入à附加依赖性中添加zdll.lib。
4. 由于libpng对pnglibconf还有依赖,所以先编译pnglibconf,再编译libpng;或者直接编译整个解决方案(这时其他的项目可能有错误,但对libpng不影响),在D:\PDFDev\lpng167\projects\vstudio目录下的Release或Debug文件夹中,将生成libpng16.dll和libpng16.lib。
六、OpenSSL 1.0.1e
1. 在http://www.openssl.org/source/下载openssl-1.0.1e.tar.gz,解压到D:\PDFDev目录下;在http://www.activestate.com/activeperl下载win32 PERL的安装包并安装,安装时将添加环境变量勾选。
2. 在VS命令行提示符中进入到D:\PDFDev\openssl-1.0.1e目录,执行下面的命令,则可在指定目录中生成bin、include和lib三个文件夹:
> perl Configure VC-WIN32 –prefix=d:/openssl-1.0.1e //执行perl配置以生成makefile,最后个参数表示OpenSSL编译后的安装路径,可无,本例默认生成到D:\usr中
> ms\do_ms //
> nmake -f ms\ntdll.mak //编译OpenSSL
>nmake –f ms\ntdll.mak test //检查上一步是否成功(若无错则可省)
> nmake -f ms\ntdll.mak install //将编译好的OpenSSL安装到指定目录
3. 如果需要生成debug版本,则需要修改D:\PDFDev\openssl-1.0.1e\ms\do_ms.bat文件(主要是添加debug关键字),然后在运行上面的命令:
perl util\mkfiles.pl >MINFO
perl util\mk1mf.pl debug no-asm VC-WIN32 >ms\nt.mak
perl util\mk1mf.pl debug dll no-asm VC-WIN32 >ms\ntdll.mak
if x%OSVERSION% == x goto skipce
perl util\mk1mf.pl debug no-asm VC-CE >ms\ce.mak
perl util\mk1mf.pl debug dll no-asm VC-CE >ms\cedll.mak
:skipce
perl util\mkdef.pl 32 libeay > ms\libeay32.def
perl util\mkdef.pl 32 ssleay > ms\ssleay32.def
4. 本例中OpenSSL生成的文件被手动保存到D:/PDFDev/openssl-1.0.1e/openssl_debug中(release类似)。
七、podofo-0.9.2
1. 在D:/PDFDev/podofo-0.9.2中新建build目录,用来存放构建后的项目,打开CMake安装目录的bin中的cmake-gui.exe,在“Where is the source code”中选择D:/PDFDev/podofo-0.9.2目录,在“Where to build the binaries”中选择D:/PDFDev/podofo-0.9.2/build目录,并选中下面的“Grouped”和“Advanced”复选框,然后单击“Configure”按钮执行配置,会得到红色标注背景的配置选项,其中含有podofo必须的ZLIB和LIBCRYPTO,但没有其他的TIFF等选项。
2. 重新配置好ZLIB和LIBCRYPTO项的包含目录和库,再次单击“Configure”执行配置,此刻就会显示出podofo的其他以来项的配置选项。不需要的项目可以在D:/PDFDev/podofo-0.9.2/CMakeLists.txt文件中注释掉(如”#FIND_PACKAGE(CppUnit)”)。配置好后再单击“Configure”执行配置,直到输出“Configure done”为止。(CMake配置中的路径最好不要有中文,配置参考如下,在新标签中可查看图片全景)
3. 单击“Generate”按钮,则可在build文件夹中生成相应的解决方案。
4. 将lpng167中的pngconf.h、pnginfo.h、png.h、pnglibconf.h和tiff-3.8.2-1-src源码目录中的tiffio.h、tiffvers.h、tiff.h、tif_config.h、tiffconf.h文件复制到D:\PDFDev\podofo-0.9.2\src中。然后在pnginfo.h文件中包含下面的两个文件:
#include “png.h”
#include “pngconf.h”
5. 在VS2010中打开D:\PDFDev\podofo-0.9.2\build\podofo.sln,编译项目”ALL_BUILD“则将所有项目都编译,同时也在D:\PDFDev\podofo-0.9.2\build\src中的debug或release中生成了podofo.lib库文件。
6. 可验证下编译后的程序是否可用,如test中的WatermarkTest(加水印)、tools中的podofoencrypt(加密)、examples中的helloworld,这些都是控制台下的exe程序,都是正确运行了的。但其中的CreationTest和podofoimg2pdf这两个项目编译失败。
7. 在编译podofo的时候,由于CMake中的配置问题,可能会出现某些错误,比如一些项目编译失败,或者是一些库连接错误,这需要自己逐步排除、慢慢修改,然后重新生成podofo.sln项目。我在编译时出现了无法解析的命令符号,是因为在CMake中将LIBCRYPTO和SSL的库都配置为ssleay32.lib,后来将LIBCRYPTO的库配置改为libeay32.lib,就可以识别了;但此时FREETYPE的Debug库配置的freetype252MT_D.lib中的一些MD5之类的东西又与libeay32.lib冲突,不知何故(经过跟踪,发现是在freetypte-2.5.2\src\base\ftobjs.c文件中因为FT_DEBUG_LEVEL_TRACE宏而使得在Debug版本中用到了MD5相关函数导致的,该宏的含义及作用或可参考http://www.oschina.net/code/explore/instantbird-0.2-src/mozilla/modules/freetype2/docs/DEBUG),于是将其改为freetype252MT.lib(release)版本,才正确了(当然若不需要相关的调试信息也可以直接编辑ftobjs.c文件,把那些宏删掉,然后再编译freetype)。当然,由于该项目的依赖项较多,所以潜在的bug也可能很多,只有在后续使用中发现解决了。