poppler 官網 http://poppler.freedesktop.org/
下載 0.88版本 https://poppler.freedesktop.org/poppler-0.88.0.tar.xz
cmake 打開並創建 build文件夾 筆者沒有安裝gtk 和 qt5 所以不選
添加release
去掉 iconv 不去掉就會報錯 筆者沒有編譯 iconv 有興趣的朋友可以編譯後指定
1.添加freetype
下載地址 https://jaist.dl.sourceforge.net/project/gnuwin32/freetype/2.3.5-1/freetype-2.3.5-1-src.zip
打開 \freetype-2.3.5-1-src\src\freetype\2.3.5\freetype-2.3.5\builds\win32\visualc\freetype.sln 直接編譯就行了沒有錯誤
修改 /poppler-0.88.0/CMakeLists.txt 添加如下 你自己的地址
在 find_package(Freetype REQUIRED) 上面添加:
set(FREETYPE_INCLUDE_DIRS "E:/pdf閱讀器/freetype-2.3.5-1-src/src/freetype/2.3.5/freetype-2.3.5/include")
set(FREETYPE_LIBRARY "E:/pdf閱讀器/PopplerLIB/freetype235.lib")
2.添加 jpeg
下載 官網 http://www.ijg.org/ 筆者下載的是最新的 http://www.ijg.org/files/jpegsrc.v9d.tar.gz
打開 vs2010命令行 跳轉到目錄下後:
copy /Y jconfig.vc jconfig.h
nmake -f makefile.vc libjpeg.lib
在查找jpeg的地方添加:
set(JPEG_LIBRARY "E:/pdf閱讀器/PopplerLIB/libjpeg.lib")
set(JPEG_INCLUDE_DIR "E:/pdf閱讀器/jpeg-9d")
3. openjpeg 錯誤
下載 https://github.com/uclouvain/openjpeg/releases/download/v2.3.1/openjpeg-v2.3.1-windows-x86.zip
set(OpenJPEG_DIR "E:/pdf閱讀器/openjpeg-v2.3.1-windows-x86/lib/openjpeg-2.3")
4. vs2010 c++ 11支持較差 無法正常編譯 可以用vs2015及以上編譯 筆者使用的是vs2015
錯誤 for語句不能出現在 constexpr 構造函數中 關於constexpr大家可以參考 https://www.cnblogs.com/sjjg/p/10713866.html
https://www.jianshu.com/p/dd34cee5242c 這個是關於靜態全局變量初始化容易出現的錯誤。
-
Decrypt.cc 中類似這樣的類 // {03} \cdot s struct Mul03Table { constexpr Mul03Table() : values() { for(int s=0; s<256; s++) { const unsigned char s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); values[s] = s ^ s2; } } constexpr unsigned char operator()(uint8_t i) const { return values[i]; } unsigned char values[256]; }; static constexpr Mul03Table mul03; 去掉 constexpr 改爲如下: struct Mul03Table { Mul03Table() { for(int s=0; s<256; s++) { const unsigned char s2 = (s & 0x80) ? ((s << 1) ^ 0x1b) : (s << 1); values[s] = s ^ s2; } } const unsigned char operator()(uint8_t i) const { return values[i]; } unsigned char values[256]; }; static const Mul03Table mul03;
5.INT32 重定義錯誤 幹掉他就就行了 jmorecfj.h 。
-
iob_func 錯誤 添加在jpegwriter.cc
#if _MSC_VER>=1900 #include "stdio.h" _ACRTIMP_ALT FILE* __cdecl __acrt_iob_func(unsigned); #ifdef __cplusplus extern "C" #endif FILE* __cdecl __iob_func(unsigned i) { return __acrt_iob_func(i); } #endif
-
只編譯poppler 就行了。