GoldenDict Windows 最新版 (20230115) 编译指南 (附二进制程序) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
nealot
V2EX    程序员

GoldenDict Windows 最新版 (20230115) 编译指南 (附二进制程序)

  •  
  •   nealot 2023-01-05 17:22:05 +08:00 2293 次点击
    这是一个创建于 1077 天前的主题,其中的信息可能已经有所发展或是发生改变。

    不知道有多少同学是使用 GoldenDict 作为主力字典工具的。GoldenDict 是一个看起来非常干净小巧的开源字典工具,支持加载 Babylon 字典,内置的 Wikipedia 引擎也很好用。虽然看起来小巧,但是实际上 GoldenDict 引用了大量的第三方开源库。在 Ubuntu 下我们习惯了输入一长串 apt-get 来完成所有依赖项的安装,但是在 Windows 下,整个过程就非常痛苦了,以至于 GoldenDict 官方团队早就放弃了定期发布 Windows 下的二进制程序。

    最近有机会体验了一番 Windows 下手动编译 GoldenDict 的整个过程,特此记录一下。

    步骤 1. 安装 Visual Studio 2013 (x86) 和 Qt 5.5.1 (x86)

    在微软的官方网站上,普通用户只要加入免费的 Visual Studio Dev Essentials 计划,就可以下载到 30 天试用版的 Visual Studio 2013 Professional ,这对我们临时编译 GoldenDict 来说已经完全够用了。在 Qt 的官方 archive 站点 download.qt.io/new_archive/qt/ 可以下载到 Qt 5.5.1 为 VS2013 预编译的安装包。

    为什么要用 VS2013 和 Qt 5.5.1 呢?原因是 GoldenDict 依赖于 QtWebkit 组件,但是 Qt 从 5.6 版开始就从预编译包里移除了 QtWebkit ,转而开始支持基于 Chromium 的 QtWebEngine 。我们不想编译整个 Qt ,希望使用 Qt 官方发布的预编译二进制包,所以就使用 Qt 5.5.1 。而 Qt 5.5.1 的 Windows 预编译包,最新支持的是 VS 2013 ,于是便使用 2013 。

    Qt 5 和 VC++ 2013 都是非常成熟的框架和软件,实测并不影响最新版 GoldenDict 的编译和使用。

    步骤 2. 下载 GoldenDict 源码

    执行 git clone 下载 GoldenDict 源码。

    步骤 3. 编码转换

    下载完成之后,需要进行一个特殊的操作:为所有的 .h .c .hh .cc 文件添加 UTF-8 BOM 前缀,否则在编译时 cl 会抛异常。转换的方式有多种,由于我比较熟悉 find, grep, bash, xargs 等 Linux 系的命令行工具,所以就写了一个小脚本来完成这个操作。理论上也可以在 Windows 下使用 PowerShell 完成同样的操作。

    步骤 4. 下载 GoldenDict 提供的预编译依赖库

    GoldenDict 项目的 README.md "Building under Windows with MS Visual Studio" 一节,提供了 GoldenDict 依赖库的二进制版本。这里我们需要下载的是 Visual Studio 2013 的 32 位依赖库。下载完成后,解压到 goldendict/winlibs/lib/msvc 目录下。

    步骤 5. 禁用 zim 字典支持

    打开 Qt 项目文件 (goldendict.pro),然后禁用 "CONFIG += zim_support",并删除 zim.hh 和 zim.cc

    之所以这么做,是因为 zim 依赖 zstd-1.4.4 (这是一个实时压缩算法),上面的预编译库并没有集成 zstd ,而我尝试从 zstd 官方 Github 下载库并集成以失败告终。因为平时用的大多数是 Babylon 字典,所以禁用 zim 并不会带来什么体验问题。

    步骤 6. 生成 Makefile

    从开始菜单打开 Qt 5.5 32-bit for Desktop (MSVC 2013) 命令行,然后进入 goldendict 目录,执行 qmake "CONFIG+=no_ffmpeg_player"。

    之所以这么做,同样是因为一个依赖库未满足。GoldenDict 主要使用 ffmpeg 来播放音频,因此禁用不会对核心体验产生影响。读者如有时间的话可以尝试手动把这个库编出来。

    步骤 7. 开始编译

    打开 "VS2013 x86 本机工具命令提示" 的终端,进入 goldendict 目录,然后执行 nmake ,等待编译完成。

    在执行 qmake 和 nmake 时,会产生不少的 Warning 。但是经过上面提到的多项调整,已经不影响编译完成了。

    步骤 8. 添加 Qt 相关 dll 到 GoldenDict.exe 目录

    这是发布 Qt 应用最终的必要操作,不再赘述。

    需要特别提醒的是,在其它电脑上部署时,还需要安装 VC++ 2013 的运行库

    花了几个小时,终于编 (摸) 译 (鱼) 完成了,我把最终的文件放在了 Google Drive 上,需要的同学可以自取:

    https://drive.google.com/file/d/1RGl7bcdhwOdEO_QirCOiUOgK3_VKqoVg/view

    (字典文件请自备哦)

    4 条回复    2024-05-21 12:14:19 +08:00
    e9pWeUbh9PGCnp95
        1
    e9pWeUbh9PGCnp95  
       2023-01-05 17:33:14 +08:00
    laqow
        2
    laqow  
       2023-01-05 19:14:35 +08:00
    可以白嫖 github actions 吧
    这个 Qt 版本体积真大啊,本末倒置的感觉,1.0.1 的版本才 15M
    woyaojizhu8
        3
    woyaojizhu8  
       2023-04-04 23:46:05 +08:00
    我一直以来用 ubuntu 源里的 goldendict,都不知道现在 windows 下想用 goldendict 这么麻烦了。而且以前 win 版的 goldendict 取词就不如 linux 版,不知道现在有没有变化。
    GoldenDictOCR
        4
    GoldenDictOCR  
       2024-05-21 12:14:19 +08:00
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4358 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 05:35 PVG 13:35 LAX 21:35 JFK 00:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86