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 \ 因爲之前沒有編譯進庫中,所以找不到這個函數的符號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章