ubuntu下编译qt版webkit

本文详细介绍如何在Qt环境下编译WebKit源码,包括安装依赖库、下载源码、编译及运行步骤。同时,剖析WebKit项目结构及其组成部分,如JavaScriptCore、WebCore和WebKit模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.设定依赖库于头文件

   sudo apt-get install libqt4-dev libxslt-dev gperf bison libsqlite3-dev flex build-essential subversion libphonon-dev

   2.下载webkit源码

   svn checkout http://svn.webkit.org/repository/webkit/trunk WebKit

   3.编译webkit

   ./WebKit/WebKitTools/Scripts/build-webkit --qt

   4.运行webkit

   $ cd WebKit/WebKitBuild/Release/bin;

   $./QtLauncher

WebKit 结构分析(来自网络)

简要的说,WebKit由三个模块组成:JavaScriptCore、WebCore 和 WebKit。WebKit作为了整个项目的名称。

JavaScriptCore:是JavaScript解释器;

WebCore:是整个项目的核心,用来实现render引擎:解析Web页面,生成一个DOM树和一个render树,并最终render it with a backend(后端?),当前已经有很多移植的Backend,如WebKit/GTK,WebKitQT等。在上图中,backend从WebCore中分离出来了,但实际上它是WebCore的一部分。

WebKit:它隐藏并选择WebCore到当前平台。在WebKit/Gtk中,WebCore以Gtk objects的形式出现,并且它们的signals和API类似其他的Gtk objects.

WebKit工程组织与管理平台与工具

当前WebKit支持四种平台:GTK、QT、Mac OS X、和Cygwin。

GTK和QT使用qmake

Mac OS X使用xcodebuild

Cygwin则使用Visual Studio

下面主要针对Qt版的WebKit作分析介绍:

首先,执行WebKitTools/Scripts下的build-webkit Perl 脚本,可以使用一些参数配置需要的功能模块,主要有SVG的一些功能配置,以及XPATH、XSLT、VIDEO等。脚本执行过程中会对相应的参数进行解析,确定编译选项、功能模块、平台信息以及相应的工具、输出路径等等参数,最后根据不同的参数,使用qmake工具由webkit.pro生成整个工程的makefile。在make的过程中会进一步调用qmake由各个子模块的.pro项目文件生成各模块的makefile。最后make各个子模块的makefile就可以得到需要的目标文件。

工程结构

这个project可以分成JavaScriptCore、WebCore、WebKit三个子模块,对应到三个子目录,具体的如上面WebKit结构介绍的。

       更进一步,整个project又分成了六个可构建出来的子project,对应到相应的.pro文件。

WebKit\WebCore\WebCore.pro:生成libQtWebKit.so或libQtWebKit.a,是整个WebKit引擎库,WebKit应用都是基于这个库。

WebKit\JavaScriptCore\kjs\testkjs.pro:生成testkjs可执行文件,它是一个JavaScript的测试工具,测试JavaScriptCore模块的功能实现。

WebKit\JavaScriptCore\pcre\dftables.pro:生成dftables可执行文件,也是一个工具。

WebKit\WebKit\qt\QtLauncher\QtLauncher.pro:生成QtLauncher可执行文件,它是基于WebKit的一个简单浏览器的应用。

WebKit\WebKit\qt\Plugins\plugins.pro:生成了libqtwebico.so,install后会放到/usr/lib/qt4/plugins/imageformats/下,这个库的作用还不明了,因为目前运行的QtLauncher应用没有用到它,有待研究。

WebKit\WebKitTools\DumpRenderTree\qt\DumpRenderTree.pro:生成DumpRenderTree工具,也是基于WebKit的一个应用工具。

<think>我们正在处理用户的问题:在Ubuntu 20.04下使用QT编译QGroundControl并进行打包。 根据用户的问题,我们需要完成以下步骤: 1. 准备环境:安装必要的依赖和工具。 2. 获取QGroundControl源代码。 3. 编译QGroundControl。 4. 打包为.deb文件。 参考引用[1]中提到,在创建Ubuntu DEB包时,需要编辑'changelog', 'copyright'和'control'文件,并确保添加了正确的构建依赖(如libqt4-dev和qt4-qmake)。但注意,QGroundControl可能使用更新的Qt本(如Qt5或Qt6),因此需要调整依赖。 另外,引用[4]和[5]提供了在Ubuntu编译Qt5.7.0时的依赖库,我们可以参考这些依赖来安装QGroundControl所需的依赖。 由于用户使用的是Ubuntu 20.04,我们需要确保安装的依赖与当前系统兼容。 步骤1:安装依赖 根据QGroundControl的官方文档(https://dev.qgroundcontrol.com/master/en/getting_started/),我们需要安装以下依赖: 引用QGroundControl官方文档的构建说明,对于Ubuntu Linux,需要安装以下包: 注意:我们将使用Qt5,因为QGroundControl目前(截至2023年)主要使用Qt5。 安装依赖: ``` sudo apt-get update sudo apt-get install build-essential \ qtcreator \ qt5-default \ qtdeclarative5-dev \ qtpositioning5-dev \ libqt5svg5-dev \ libqt5webkit5-dev \ libqt5qml5 \ qtquickcontrols2-5-dev \ qml-module-qtquick2 \ qml-module-qtquick-controls \ qml-module-qtquick-controls2 \ qml-module-qtquick-dialogs \ qml-module-qtquick-layouts \ qml-module-qt-location \ qml-module-qtpositioning \ libqt5serialport5-dev \ libfuse2 ``` 此外,还需要安装一些其他依赖,如libsdl2-dev(用于视频流)和gstreamer等(可选,根据需求)。但是,为了基本编译,我们可以按照上述依赖。 步骤2:获取源代码 ``` git clone --recursive https://github.com/mavlink/qgroundcontrol.git cd qgroundcontrol ``` 步骤3:编译 有两种编译方式:使用Qt Creator或使用命令行。 这里我们使用命令行: ``` mkdir build cd build qmake .. # 注意:确保qmake是Qt5的本,可以通过`qmake -v`查看 make -j$(nproc) ``` 步骤4:运行测试 编译完成后,可以在build目录下运行: ``` ./qgroundcontrol-start.sh ``` 步骤5:打包为.deb 参考引用[1]中创建DEB包的方法,我们需要创建一个debian目录,并编写控制文件。 但是,QGroundControl官方提供了打包脚本。我们可以使用其自带的打包脚本(如果支持的话)或者手动创建。 在QGroundControl的源代码中,有一个`deploy`目录,其中包含了打包脚本。我们可以使用它来创建.deb包。 具体步骤: 1. 确保已经安装了打包工具:`sudo apt-get install devscripts debhelper` 2. 进入deploy目录:`cd deploy/ubuntu` 3. 运行打包脚本:`./package.sh` 注意:package.sh脚本可能会要求安装一些额外的依赖,并且会调用dpkg-buildpackage来构建包。 但是,在运行打包脚本之前,我们需要确保满足所有依赖。另外,打包脚本可能会根据系统环境进行一些调整。 如果遇到问题,可能需要手动编辑debian目录下的文件(如control、changelog等),确保依赖正确。 根据引用[1]的建议,我们需要在Build-Depends中添加qtbase5-dev(因为使用的是Qt5)以及其他必要的库。 在QGroundControl的debian/control文件中,通常已经配置好了。但我们可以检查一下。 如果debian目录不存在,我们可以使用`dh_make`来创建模板,然后手动编辑。 但是,由于QGroundControl的deploy/ubuntu目录下已经提供了打包脚本,我们优先使用官方提供的方法。 因此,总结步骤: 1. 安装依赖(包括构建依赖和打包工具) 2. 获取源代码(包括子模块) 3. 编译(确保编译通过) 4. 使用官方打包脚本打包 注意:在Ubuntu 20.04上,可能还需要安装一些额外的依赖,因为打包脚本可能会调用一些特定的工具。 如果官方打包脚本不适用于Ubuntu 20.04,我们可能需要调整脚本或手动打包。 手动打包的一种方法是将编译好的可执行文件、资源文件等按照FHS标准放置到临时目录,然后使用dpkg-deb打包。 但是,我们尽量使用官方脚本。 根据QGroundControl的官方文档,打包步骤在:https://dev.qgroundcontrol.com/master/en/deploy/debian_packages/ 文档中说明: 在Ubuntu上,可以使用`deploy/ubuntu/package.sh`脚本来构建.deb包。 因此,我们按照文档操作。 具体步骤: 1. 安装依赖: ``` sudo apt-get update sudo apt-get install build-essential \ qtcreator \ qt5-default \ qtdeclarative5-dev \ qtpositioning5-dev \ libqt5svg5-dev \ libqt5webkit5-dev \ libqt5qml5 \ qtquickcontrols2-5-dev \ qml-module-qtquick2 \ qml-module-qtquick-controls \ qml-module-qtquick-controls2 \ qml-module-qtquick-dialogs \ qml-module-qtquick-layouts \ qml-module-qt-location \ qml-module-qtpositioning \ libqt5serialport5-dev \ libfuse2 \ debhelper \ devscripts ``` 2. 克隆代码: ``` git clone --recursive https://github.com/mavlink/qgroundcontrol.git cd qgroundcontrol ``` 3. 使用打包脚本: ``` cd deploy/ubuntu ./package.sh ``` 4. 生成的.deb文件在上级目录(qgroundcontrol目录)中。 注意:打包过程可能会要求输入一些信息(如本号等),根据提示输入即可。 如果遇到问题,可以查看脚本内容,可能需要修改脚本以适应Ubuntu 20.04。 由于QGroundControl的更新,可能脚本已经支持Ubuntu 20.04。 如果打包过程中出现依赖问题,可能需要调整debian/control文件中的依赖项,确保与Ubuntu 20.04的软件包名称匹配。 例如,在Ubuntu 20.04中,一些软件包可能已经更名或不再可用。我们可以使用`apt search`来查找替代的包。 最后,生成.deb包后,可以使用`sudo dpkg -i qgroundcontrol.deb`安装。 以上步骤基于QGroundControl的官方文档和引用的资料,结合了在Ubuntu编译Qt应用和打包的经验。 注意:由于环境差异,实际执行中可能会遇到问题,需要根据具体错误信息进行解决。 下面,我们将按照上述步骤详细展开,并生成相关问题。</think>### 在 Ubuntu 20.04 下编译和打包 QGroundControl #### 步骤 1:安装依赖 ```bash sudo apt update sudo apt install -y \ build-essential \ cmake \ git \ qtcreator \ qtbase5-dev \ qtdeclarative5-dev \ qtpositioning5-dev \ libqt5svg5-dev \ libqt5serialport5-dev \ qml-module-qtquick2 \ qml-module-qtquick-controls2 \ qml-module-qt-location \ qml-module-qtpositioning \ libfuse2 \ libssl-dev \ libsdl2-dev \ debhelper \ devscripts \ dh-make ``` > 关键依赖说明: > - `qtbase5-dev` 和 `qtdeclarative5-dev` 提供 Qt5 核心库[^4][^5] > - `libqt5svg5-dev` 支持 SVG 渲染 > - `debhelper` 和 `dh-make` 用于 Debian 打包[^1] --- #### 步骤 2:获取源代码 ```bash git clone --recursive https://github.com/mavlink/qgroundcontrol.git cd qgroundcontrol git submodule update --init --recursive ``` --- #### 步骤 3:编译项目 ```bash mkdir build && cd build qmake ../qgroundcontrol.pro make -j$(nproc) # 使用所有CPU核心加速编译 ``` > 验证编译成功: > ```bash > ./qgroundcontrol-start.sh # 测试运行 > ``` --- #### 步骤 4:创建 DEB 包 1. **准备打包环境** ```bash cd .. mkdir -p pkg/DEBIAN cp -r build qgroundcontrol # 将编译结果复制到打包目录 ``` 2. **创建控制文件** `pkg/DEBIAN/control` ```plaintext Package: qgroundcontrol Version: 4.3.0 Section: utils Priority: optional Architecture: amd64 Depends: libqt5core5a (>=5.12), libqt5gui5 (>=5.12), libqt5qml5 (>=5.12), libqt5quick5 (>=5.12), libfuse2, libsdl2-2.0-0 Maintainer: Your Name <your@email.com> Description: Ground Control Station for drones QGroundControl is an intuitive ground control station for drones. ``` 3. **添加安装脚本** `pkg/DEBIAN/postinst` ```bash #!/bin/sh chmod 755 /usr/bin/qgroundcontrol-start.sh ``` 4. **构建 DEB 包** ```bash sudo chmod 755 pkg/DEBIAN/postinst dpkg-deb --build pkg qgroundcontrol_4.3.0_amd64.deb ``` > 关键点: > - `Depends` 字段必须包含所有运行时依赖[^1] > - 使用 `dpkg-deb` 构建标准 Debian 包[^1] > - 最终生成 `qgroundcontrol_4.3.0_amd64.deb` --- #### 验证安装 ```bash sudo dpkg -i qgroundcontrol_*.deb qgroundcontrol-start.sh # 启动验证 ``` --- ### 常见问题解决 1. **Qt 本冲突** 确保使用 Qt5: ```bash sudo update-alternatives --config qt5-qmake # 选择 Qt5 本 ``` 2. **缺少 OpenGL 库** 安装 GL 支持: ```bash sudo apt install libgl1-mesa-dev ``` 3. **打包时权限错误** 所有安装路径需以 `/usr/` 开头,脚本必须有可执行权限[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值