libharu-RELEASE_2_3_0编译

  1. 下载最新的libharu :http://libharu.org/ 网址贴下,可以去下载最新的版本,我这里是2_3_0的版本;
  2. 编译libharu要用到zlib和libpng,所以我也从对应的官网上下载:zlib(http://www.zlib.net/),libpng(http://www.libpng.org/pub/png/libpng.html)
  3. 先编译zlib,在zlib-1.2.11\contrib\vstudio下面有readme.txt,里面有写“This directory contains projects that build zlib and minizip using Microsoft Visual C++ 9.0/10.0. You don't need to build these projects yourself. You can download the binaries from: http://www.winimage.com/zLibDll”.好吧,我就直接下载这个库吧,但是然而我并没有找到这个库。。。。在这个网站上,还是老老实实编译吧,谁找到了说一下啊,避免后面的人再重新编译
  4. zlib-1.2.11\contrib\vstudio中的readme.txt中当然还有教我们怎么去编译这个库,我用都的是VS2010,所以参照readme.txt中说的“Open contrib\vstudio\vc10\zlibvc.sln with Microsoft Visual C++ 2010”
  5. 打开之后有好多工程,只编译我们需要的zlibvc,编译之后生成了zlibwapi.dll和zlibwapi.lib
  6. 再编译libpng,libpng也依赖到zlib,先打开lpng1637\projects\vstudio下面的vstudio.sln
  7. 编译了一下,发现些错误,图7,原来这里是需要把zlib的源码也导入过来一起编译才可以,不然找不到对应的文件
  8. 回到前面编译zlib,生成的最终是dll文件,这里尝试下生成lib文件,图8 把配置类型改为静态库,改的时候发现zlibstat好像就是静态库的配置。。。。尴尬,在网上搜了下,果然这个是编译静态库用的工程
  9. 编译下这个工程zlibstat,生成好了zlibvc是动态库 zlibstat 是静态库 testzlib   测试静态库,testzlibdll  测试动态库
  10. 好了,回到libpng,libpng直接使用zib的静态库是否可以呢?补充一句,前面编译我调用都是32位的工程。读下这个工程lpng1637\projects\vstudio下面的readme.其中有这样一句“If you do not want to use the DLL,and prefer static linking instead,you may choose the 'release library' configuration. (这个就是从编译器菜单栏下面的Debug和Release框中选择release library).This is built with a non-standard runtime library -the "MultiThreaded" version.When you build your application,it must be compiled with this option(/MT),otherswise it will not build(if you are lucky) or it will crash (if you are not.) See the WARNING file that is distributed with the README.
  11. 既然如此,那么我们就选择到Release library,编译下看看,提示找不到zlib的相关文件,如图11的编译结果,当然我们找下C/C++ 常规中的 附加包含路径 看到有zlib的一个变量$(ZLibSrcDir);,好熟悉!哦,在ReadMe中有提到过的一个文件中有这个文件夹定义,是在readme.txt同目录下的zlib.props,打开zlib.props,其中有这样一句<ZLibSrcDir>..\..\..\..\zlib</ZLibSrcDir>,并且在这个文档的开头,有说“ You may need to edit this file in order to update the location of the zlib source code.”
  12. 好了我们就改变下这个路径吧,看下目前我们用的zlib的地方是在哪里,路径是ls ../../../zlib-1.2.11/ 那我们就把这个路径填过去,改一下,注意这里的斜杠,要反过来写,保存下这个文件,然后先把VS退出,然后再打开这个目录下的vstudio.sln,重新编译一下
  13. 编译下好像还有错误,哦,因为我们编译的是libpng,这个工程的路径会再深一点。。。所以路径是<ZLibSrcDir>..\..\..\..\zlib-1.2.11</ZLibSrcDir>,不用关掉编译器,直接重新编译,成功,图13
  14. 现在为止我们编译好了zlib.lib和libgpng16.lib,为什么多了个16?因为配置的时候目标文件名后面就多了个16,图14
  15. 好了,现在编译libharu,进入目录D:\T70\PDF_Pro_3\libharu-RELEASE_2_3_0\script中打开Makefile,这文件中有定义libpng和zlib文件夹的路径,修改下这个路径 PNG_PREFIX = ../../lpng1637 ZLIB_PREFIX = ../../zlib-1.2.11
  16. 用管理员模式打开cmd.exe ,进入目录用nmake编译了下,出现解决'nmake' 不是内部或外部命令,也不是可运行的程序 或批处理文件。因为我用的是系统的cmd.exe ,打开VS的cmd
  17. 打开之后,编译,发现报错,找不到zlib.h,看了下发现斜杠写错了.图17.2纠正一下,再编译看看,我估计还会包找不到lib的错误吧,因为这里的库的名字都是zlib.lib和libpng.lib,不管了先编译看看
  18. 编译之后还是报错,找不到zlib.h,我找下唉看看,发现zlib.h直接是在zlib-1.2.11这个目录下,而Makefile.msvc文件中并没有直接包含zlib-1.2.11这个文件夹,二是包含的这个文件下的include文件夹。想起来了,有篇文章上说“为了方便编译Libharu,将zlib和libpng的头文件与静态库,单独存放到各自的include和lib文件夹里。”好了,让我们放一下看看
  19. 最终改成这样图19 终于不报找不到zlib.h的错误了,看下错误原因,应该吧zlib的所有.h文件都要copy到include目录下,libpng同样,要copy到对应目录下
  20. 好了,终于编译成功了,在libharu-RELEASE_2_3_0目录下有一个libhpdf.lib
  21. 来,编译一个我们例子
  22. 做一个WIN32 控制台程序 pdf_pro3_demo,
  23. 在工程中创建一个include目录,用来放libharu的头文件,把libharu文件夹下的include copy过来,然后在win32 工程中include 邮件添加现有项,把所有.h文件都添加进来,然后改添加库了,在工程中创建个lib文件夹,吧libhpdf.lib copy过来
  24. 在图24的地方加入这个lib目录,库目录,( $(ProjectDir) 表示 xxx.vcxproj所在的目录 )这里只是说在这里找库,但是具体找什么库,下面要说
  25. 链接器-->输入-->附加依赖项 写libhpdf.lib,先不管其他的,编译下看看,编译过了。。。
  26. 找个demo试试,报错了,发现inlude文件夹忘记包含进去了,然后再编译hpdf_config.h找不到,原理./libharu-RELEASE_2_3_0/win32/include/hpdf_config.h这个下面也有些头文件,也copy过来。一看。。-_-||,只有一个。。。
  27. copy过来之后,还要,在头文件中“添加现有项”。。。再编译还是提示错误“IntelliSense: 无法打开 源 文件 "hpdf_config.h"“,然后在图27 中附加包含目录添加 在 项目属性=》配置属性=》C/C++ =》常规 =》附加包含目录 中增加:$(ProjectDir)
  28. 编译下,还报错,好像之前遇到过
  29. 之前想到编译libharu的时候,zlib库和libpng都没写争取,这里加上之后再重新编译D:\T70\PDF_Pro_3\libharu-RELEASE_2_3_0>nmake -clean script\Makefile.msvc,然后D:\T70\PDF_Pro_3\libharu-RELEASE_2_3_0>nmake -all script\Makefile.msvc
  30. 还是不行。。。。。
  31. 算了,和之前一样,在hpdf_config.h中加入LIBHPDF_HAVE_NOZLIB,重新编译libharu
  32. 这样之后可以编译过了,而且我发现把编译好的libhpdf.lib放在工程目录下就可以,不用放在工程目录下的lib目录下,说明我前面设置的路径有点问题,先不管了。
  33. 另外一个问题,这次我不用再 用这句了#pragma comment(lib, "libhpdf.lib")
  34. 好了生成了.pdf了。松了口气,马上去研究Russia编码问题
  35. Russia编码用到了HPDF_UseUTFEncodings这个函数,但是在用的时候发现会报错说没有这个函数(错误 14 error LNK2019: 无法解析的外部符号 _HPDF_UseUTFEncodings,该符号在函数 _main 中被引用),Makefile.msvc中看下需要在OBJS = \这个后面加上 src\hpdf_encoder_utf.obj \ 因为之前没有编译进库中,所以找不到这个函数的符号

猜你喜欢

转载自blog.csdn.net/yangkunhenry/article/details/103398257