1.下载代码
创建代码目录,在github上拉取wkhtmltopdf源码仓和编译仓;
mkdir wkhtmltopdf_code
cd wkhtmltopdf_code
git clone git@github.com:wkhtmltopdf/wkhtmltopdf.git
git clone git@github.com:wkhtmltopdf/packaging.git
下载完成后代码仓是wkhtmltopdf目录,编译仓是packaging目录;
代码仓中qt目录为空,还需要补充下载qt代码,在代码仓目录wkhtmltopdf中执行下面的指令,下载qt代码;
git submodule update --init --recursive
至此代码下载完成
注意:github下代码需要配置服务器公钥到github上,这个需要自己用账号配置,下面是操作截图。
2.编译环境配置
使用packaging目录的build的脚本进行编译,但是编译前需要先安装依赖的库;
如果是初始环境 需要先更新软件源:
sudo apt-get update
然后执行下面的指令下载依赖包,这个下载需要几分钟,不同网络环境时间不同;
sudo apt install -y python-yaml docker.io vagrant virtualbox p7zip-full
3. 编译
在packaging目录使用下面的指令进行编译,最后一个参数是源码仓目录;第一次编译需要编QT,比较耗时,大概一两个小时左右;后续如果修改源码,直接使用这个指令编译即可,非首次编译大概需要两三分钟左右;
sudo ./build package-docker buster-amd64 ../wkhtmltopdf
4.运行
编译出来的bin和动态库文件在packaging/targets/buster-amd64/app/bin目录下
直接运行会报错,因为wkhtmltopdf运行依赖jpeg库,需要先安装jpeg;
执行下面的指令安装jpeg
sudo apt-get install libjpeg62
安装完成后再次运行,发现报错version `GLIBC_2.28’ not found,这个原因是Ubuntu18.04默认是glibc2.27版本的,wkhtmltopdf运行依赖2.28版本的glibc,我们安装即可,如果是Ubuntu20.04则不会有这个报错。
可以使用下面的指令查看当前系统支持的glibc版本,可以看到最高到2.27,升级方法使用软件包升级方式;
strings /lib/x86_64-linux-gnu/libc.so.6 | grep GLIBC_
修改 /etc/apt/sources.list 在最后加一行
deb http://security.debian.org/debian-security buster/updates main
然后执行下面的指令,安装更新过程因为网络原因比较慢,等待安装完成即可
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 112695A0E562B32A 54404762BBB6E853
sudo apt update
sudo apt install libc6-dev libc6
安装完成后再查看glibc版本,可以看到已经支持glibc2.28,再次运行程序已经OK了,至此编译运行已完成;