PDFium库在Windows平台的编译与优化

1. 引言

PDFium是一个开源的PDF渲染引擎,由Google开发并维护。本文旨在提供一个全面的指南,介绍如何在Windows平台上编译PDFium动态库,并解决编译过程中可能遇到的问题。

2. 环境准备

2.1 xx上网工具

由于PDFium源码托管在Google服务器上,需要确保能够访问 https://pdfium.googlesource.com/pdfium/

2.2 安装depot_tools

depot_tools是Chromium项目开发使用的一套工具集。按照官方指南安装,并将其添加到系统环境变量中。

2.3 Visual Studio环境

截至2017年9月(R503915),PDFium要求至少使用Visual Studio 2017 (15.7.2)版本。需要安装以下组件:

  • "Desktop development with C++" 组件
  • "MFC and ATL support" 子组件
  • Windows 10 SDK (版本10.0.17134)
  • SDK Debugging Tools

可以通过Visual Studio安装程序或命令行安装这些组件:

--add Microsoft.VisualStudio.Workload.NativeDesktop
--add Microsoft.VisualStudio.Component.VC.ATLMFC --includeRecommended

3. 获取源码

执行以下命令获取PDFium源码:

mkdir repo
cd repo
gclient config --unmanaged https://pdfium.googlesource.com/pdfium.git
gclient sync

4. 编译过程

4.1 生成GN构建文件

进入PDFium根目录并执行以下命令:

cd pdfium
set DEPOT_TOOLS_WIN_TOOLCHAIN=0
gn args out/Release64

在打开的args.gn文件中,添加以下配置:

use_goma = false
is_debug = false
pdf_use_skia = false
pdf_use_skia_paths = false
pdf_enable_xfa = true
pdf_enable_v8 = true
pdf_is_standalone = true
is_component_build = false
clang_use_chrome_plugins = false
target_cpu="x64"

4.2 执行构建

使用ninja执行构建动作:

ninja -C out\Release64 pdfium

5. 解决导出函数名问题

在编译32位库时可能会遇到导出函数名非C风格的问题。解决方法如下:

  1. 打开 pdfium\public\fpdfview.h 文件。
  2. 将以下代码:
#ifdef FPDFSDK_EXPORTS
# if defined(_WIN32)
#  define FPDF_EXPORT __declspec(dllexport)
#  define FPDF_CALLCONV __stdcall
# else
#  define FPDF_EXPORT __attribute__((visibility("default")))
#  define FPDF_CALLCONV
# endif
#else
# if defined(_WIN32)
#  define FPDF_EXPORT __declspec(dllimport)
#  define FPDF_CALLCONV __stdcall
# else
#  define FPDF_EXPORT
#  define FPDF_CALLCONV
# endif
#endif

替换为:

#if defined(FPDFSDK_EXPORTS)
#ifdef _WIN32
#define FPDF_EXPORT __declspec(dllexport)
#else
#define FPDF_EXPORT __attribute__ ((visibility("default")))
#endif
#else
#ifdef _WIN32
#define FPDF_EXPORT __declspec(dllimport)
#else
#define FPDF_EXPORT __attribute__ ((visibility("default")))
#endif
#endif
#define FPDF_CALLCONV
  1. 重新执行GN构建和ninja构建过程。

6. 验证

编译完成后,可以使用 dumpbin -exports pdfium.dll 命令检查导出函数名是否正确。

7. 结论

通过以上步骤,我们成功在Windows平台上编译了PDFium动态库,并解决了32位库导出函数名的问题。这个优化后的过程应该能够满足大多数开发者的需求。

8. 注意事项

  • 本文基于2018年9月的信息,随着时间推移,某些细节可能需要调整。
  • 官方对x86平台的支持可能不如x64完善,在选择目标平台时需要考虑这一点。
  • 在遇到问题时,建议查阅最新的官方文档,因为PDFium项目可能会不断更新其构建要求和过程。
posted @ 2018-11-09 17:53  purehol  阅读(4647)  评论(0编辑  收藏  举报