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 就行了。