LimeReport编译与交叉编译
1、下载LimeReport的Release版本2、Windows开发环境中编译LimeReport3、Linux交叉编译服务器中交叉编译LimeReport4、Unknow module(s) in QT: uitools 问题解决4.1 获取QT5.15.2源码4.2 交叉编译qttools模块4.3 把qttools模块添加到交叉编译环境的QT中4.4 重新编译LimeReport
LimeReport是基于QT平台的报表生成引擎和设计工具。
官方网址:https://limereport.ru/en/index.php
国内git:https://gitcode.com/gh_mirrors/li/LimeReport/overview?utm_source=artical_gitcode&index=top&type=card&webUrl&isLogin=1
github:https://github.com/fralx/LimeReport
直接从代码仓中下载master分支在qt中编译会有问题,我们下载Release版本进行调整编译。
1、下载LimeReport的Release版本
首先进入LimeReport的github网址,如下图:

上图中在右侧能看到Release的链接,点击进入Rlease版本列表页面,如下图:

从上图中能看到最新的发布版本为1.5.35,能在页面中看到这个版本的源码下载链接,我们把这两个格式(zip和tar.gz)的源码包都下载下来。如下图:

2、Windows开发环境中编译LimeReport
LimeReport支持qmake和cmake编译,我们这里采用qmake的方式。首先解压缩LimeReport-1.5.35.zip,解压后的内容如下:

然后用qt creator直接打开limereport.pro工程,如下图:

等待工程文件索引完毕,可以鼠标右键limereport工程在弹出菜单中选择[重新构建],如下图:

等待构建完毕,发现编译过程并未正确完成,报了1个[C2079:“pt”使用未定义的 class”QPainterPath”]的错误。如下图:

QPainterPath是QT的系统类,应该是未包含直接使用导致的。因此,这个错误的解决办法,就是在发生此错误的源码文件顶部增加对QPainterPath的包含。代码如下:
#include <QPainterPath>
如下图:

然后再对limereport工程进行重新构建,发现编译成功,Debug或(和)Release编译成功后,会在LimeReport-1.5.35源码目录下生成一个build目录,如下图:

逐级进入build目录,就会找到生成的动态库文件和所需的头文件, 如下图:


3、Linux交叉编译服务器中交叉编译LimeReport
首先把LimeReport-1.5.35源码(除build和.pro.user外的整个目录)上传至交叉编译服务器。上传后如下图:


然后进入LimeReport-1.5.35目录,执行交叉编译工具链中的qmake以生成Makefiles文件,
如下图:

然后执行make进行编译。
4、Unknow module(s) in QT: uitools 问题解决
在交叉编译环境中编译LimeReport,如果出现 Unknow module(s) in QT: uitools 问题,如下图:

这个错误的意思是在编译LimeReport时依赖QT的uitools模块,如果在交叉编译环境中的QT没有这个模块,就会导致这个错误的出现。uitools模块是qttools模块的一部分,主要作用是解析界面文件.ui。因此需要我们在QT中增加qttools模块。
那么如何解决这个问题呢?有2种途径,一种是重做交叉编译环境,使的交叉编译环境中的QT中增加上qttools模块;第二种方法,是在当前交叉编译环境中手动编译qt源码中的qttools模块,手动把qttools模块增加到当前交叉编译环境的QT中。
这里我先记录下第二种方法,具体如下:
4.1 获取QT5.15.2源码
可以从QT官网获取QT5.15.2的源码,地址为:https://download.qt.io/archive/qt/5.15/5.15.2/single/
如下图:

下载后,把qt-everywhere-src-5.15.2.tar.xz上传至交叉编译服务器的/opt目录下。然后解压缩后把源码目录修改为Qt目录,如下图:

4.2 交叉编译qttools模块
进入到qttools模块源码目录/opt/Qt/5.15.2/Src/qttools/,可以看到qttools.pro文件,然后执行交叉编译工具链中的qmake,生成Makefile文件。然后执行make -j4进行编译
cd /opt/Qt/5.15.2/Src/qttools/
# 新部署的交叉编译环境,使用新部署的
/home/zhenglb/Linux/1013p/wg_rk356x_linux_sdk/buildroot/output/rockchip_rk3568/host/bin/qmake
make -j4
编译完毕后,会在qttools源码根目录下生成bin、lib、include、mkspecs几个目录,如下图:

4.3 把qttools模块添加到交叉编译环境的QT中
交叉编译环境是指所使用qmake所在host目录下的aarch64-buidlroot-linux-gnu/sysroot的环境,需要把上一步交叉编译qttools所生成的内容分别部署到sysroot下各个对应的目录中,具体分别如下:
把 /opt/Qt/5.15.2/Src/qttools/include/ 目录下的所有内容部署到 /home/zhenglb/Linux/1013p/wg_rk356x_linux_sdk/buildroot/output/rockchip_rk3568/host/aarch64-buildroot-linux-gnu/sysroot/usr/include/qt5/ 目录下。【注:手动复制时头文件出现引用(#include)/opt/Qt源码中的头文件,可以把引用源码中的头文件直接复制过来,或者保留/opt/Qt源码不要删除,否则会出现找不头文件的错误。】把 /opt/Qt/5.15.2/Src/qttools/lib/ 目录下的所有内容部署到 /home/zhenglb/Linux/1013p/wg_rk356x_linux_sdk/buildroot/output/rockchip_rk3568/host/aarch64-buildroot-linux-gnu/sysroot/usr/lib/ 目录下。把 /opt/Qt/5.15.2/Src/qttools/mkspecs/ 目录下的所有内容部署到 /opt/Qt/5.15.2/Src/qttools/lib/ 目录下的所有内容部署到 /home/zhenglb/Linux/1013p/wg_rk356x_linux_sdk/buildroot/output/rockchip_rk3568/host/aarch64-buildroot-linux-gnu/sysroot/mkspecs/ 目录下。把 /opt/Qt/5.15.2/Src/qttools/bin/ 目录下的所有内容部署到 /opt/Qt/5.15.2/Src/qttools/lib/ 目录下的所有内容部署到 /home/zhenglb/Linux/1013p/wg_rk356x_linux_sdk/buildroot/output/rockchip_rk3568/host/aarch64-buildroot-linux-gnu/sysroot/usr/bin/ 目录下。【不部署这部分,别删除就行,会从/opt目录下找】
4.4 重新编译LimeReport
再重新执行make -j4,就可以编译成功了。编译成功后就在LimeReport源码目录下生成一个build目录,生成的库就在这里了,如下图:
