使用gn gen构建PDFium后缺失pdfium.dll,求成功构建经验分享
解决PDFium构建后未生成pdfium.dll的问题
我之前构建PDFium时也碰到过一模一样的情况!一堆零散的DLL但核心的pdfium.dll就是找不到,折腾了好一阵才搞定,分享几个我踩过的坑和解决办法:
1. 检查GN构建参数是否正确
PDFium的构建行为完全由GN参数控制,最关键的就是是否生成共享库的配置:
- 打开你的构建目录的GN参数配置:
gn args out/[你的构建目录名] - 确保里面有这一行:
pdfium_is_shared_library = true
如果没有,添加它并保存,然后重新运行构建命令。 - 另外,
is_component_build这个参数也会影响模块拆分,如果设为true可能会把功能拆成多个小DLL,如果你想要单一的pdfium.dll,可以尝试把它设为false(注意要和pdfium_is_shared_library配合使用)
2. 明确指定构建核心库目标
默认运行ninja可能会构建所有模块(包括测试工具、辅助组件),但不一定会单独打包核心的pdfium.dll。你可以直接指定构建目标:
ninja -C out/[你的构建目录名] pdfium
这个命令会专门构建核心的PDFium库,完成后去对应目录里找,大概率就能看到pdfium.dll了。
3. 确认构建目录和配置匹配
别搞混了Debug/Release或者x86/x64架构!比如你生成的是Release版本,就去out/Release目录找;如果是x86架构,要确认GN参数里target_cpu = "x86",然后去对应的架构目录下查找,不要在x64目录里瞎找。
4. 验证函数是否在其他DLL中(极端情况)
虽然你提到的FPDFAvail_GetDocument()、FPDFBitmap_GetBuffer()这些都是核心API,但万一遇到模块拆分的情况,可以用工具检查导出函数:
- 用Windows的
dumpbin工具:dumpbin /exports [某个DLL路径] - 或者用Dependency Walker这类可视化工具,查看每个DLL的导出函数列表,确认这些API是否存在于某个DLL中(不过正常情况应该都在
pdfium.dll里)
附:我常用的完整构建流程
给你一个我每次都能成功生成pdfium.dll的步骤,你可以对照着走一遍:
- 确保depot_tools已经配置好并加入环境变量
- 获取PDFium代码并同步依赖:
gclient config --unmanaged https://pdfium.googlesource.com/pdfium.git gclient sync - 生成Release版本的构建文件(带共享库):
gn gen out/Release --args="is_debug=false pdfium_is_shared_library=true target_cpu=\"x64\"" - 构建核心库:
ninja -C out/Release pdfium
完成后去out/Release目录,就能找到pdfium.dll和对应的pdfium.lib了。
内容的提问来源于stack exchange,提问作者J. Nee
相关产品推荐
相关产品推荐

