Ubuntu 下搭建Qt Webkit(一)

本文详细介绍了在Linux环境下构建QtWebKit所需的依赖、步骤及常见错误解决方案。

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

http://trac.webkit.org/wiki/BuildingQtOnLinux#DependenciesforspecificLinuxdistributions

Building the Qt port on Linux

These instructions apply to Linux in general with source packages.

Dependencies

The code should be easily built on any Linux distribution which has development packages for Qt installed. Below is the list of dependencies:

  • Qt version 5.0.0 or later
  • gperf (v3.0 or later)
  • bison (v2.4.1 or later)
  • flex (v2.5.33 or later)
  • sqlite (development files)
  • fontconfig (development files)
  • xrender (development files)
  • phonon (development files)
  • libjpeg (development files)
  • libpng (development files)

See also: how to install dependency packages on major linux distributions.

Building WebKit

First follow the instructions there to get the sources. The Qt port is part of the WebKit source tree, so you don't need anything extra.

Finally, set the QTDIR environment variable to Qt 5.x's installation path (or qtbase/bin for a Qt developer builds) and make sure Qt 5.x's qmake is the first qmake in your PATH (typically by running export PATH=$QTDIR/bin:$PATH).

If you want the same environment to build bot, refer to http://trac.webkit.org/wiki/QtWebKitGardening. The link contains following items.

  • build Qt5
  • build WebKit
  • run layout test

If your qmake binary has a different name, e.g. when using Debian, use the --qmake= option to specify the name.

Build WebKit and the Qt test browser with

WebKit/Tools/Scripts/build-webkit --qt

You can also build using Intel® compilers with the following command.

WebKit/Tools/Scripts/build-webkit --qt --qmakearg="CONFIG+=icc -spec linux-icc"

build-webkit (see above) also supports special variable for specifying the OBJDIR directory, as well as some configure and build arguments

WEBKIT_OUTPUTDIR=`pwd`/qtbuild  WebKit/Tools/Scripts/build-webkit --qt --makeargs="-j20 -s" --no-video --debug

Optional feature flags and CONFIG options

  • features.pri lists many configurable build options for WebCore and JavascriptCore.
  • For ICU library support: pass CONFIG+=use_system_icu as an extra build-webkit argument. (Currently only tested on Linux.)

Using QtCreator to build QtWebKit

  • To better debug QtWebKit, we can use QtCreator.
  • Open $WEBKITDIR/WebKit.pro in QtCreator.
  • Click Projects->Build Settings, In "GENERAL" un-check shadow build as it is not needed.
  • In Build Steps, remove unnecessary build steps, especially qmake and make.
  • Add a custom process step.
  • Check the "Enable custom process set up" checkbox.
  • Fill the "command" box with Tools/Scripts/build-webkit path
  • Fill the "working directory" with webkit/WebKitBuild/Debug/bin path
  • Add "--qt" to command arguments.
  • In build environment you need to update PATH variable by appending $QTDIR/gcc/bin path to existing value.
  • Add a new variable QMAKEPATH to $WEBKITDIR/Tools/qmake.

Testing the port

A very simple test browser is built along with the port and can be executed with

Tools/Scripts/run-launcher --qt

Common Build Errors

Gold Linker Error

/usr/bin/gold: fatal error: out of file descriptors and couldn't close any

This is a bug in Gold Linker. See here
To fix this try the following with root privileges and build:

ulimit -n 65535

If you don't have root privileges you should add the following in /etc/security/limits.conf file

* hard nofile 65535

This might need restarting X11/reboot.

If you wan't a quick temporary workaround, try the following. (Tested in Ubuntu 10.10)

sudo -s;
ulimit -n 65535;
exec su - yourusername

Missing gperf

../../../WebCore/html/HTMLDocument.cpp: In member function 'virtual void WebCore::HTMLDocument::determineParseMode(const WebCore::String&)':
../../../WebCore/html/HTMLDocument.cpp:389: error: expected initializer before '*' token
../../../WebCore/html/HTMLDocument.cpp:390: error: 'doctypeEntry' was not declared in this scope
../../../WebCore/html/HTMLDocument.cpp:398: error: 'doctypeEntry' was not declared in this scope
../../../WebCore/html/HTMLDocument.cpp:401: error: 'PubIDInfo' has not been declared
../../../WebCore/html/HTMLDocument.cpp:405: error: 'PubIDInfo' has not been declared

This error is typically caused by not having gperf installed. Install gperf, run touch WebCore/html/DocTypeStrings.gperf and try building WebKit again.

Missing SQLite development package

../../../WebCore/loader/icon/SQLDatabase.cpp:30:21: error: sqlite3.h: No such file or directory
../../../WebCore/loader/icon/SQLDatabase.cpp:36: error: "SQLITE_ERROR" was not declared in this scope
../../../WebCore/loader/icon/SQLDatabase.cpp:37: error: "SQLITE_DONE" was not declared in this scope
../../../WebCore/loader/icon/SQLDatabase.cpp:38: error: "SQLITE_OK" was not declared in this scope
../../../WebCore/loader/icon/SQLDatabase.cpp:39: error: "SQLITE_ROW" was not declared in this scope

This error is typically caused by not having the development component of libsqlite3 installed. Install the development package and try building WebKit again.

Missing flex

.../WebKitBuild/Release/lib/libWebKitQt.so: undefined reference to `WebCore::CSSParser::lex()'

This error is typically caused by not having flex installed. Install flex, run touch WebCore/css/tokenizer.flex and try building WebKit again.

Incompatible version of bison

bison -d -p kjsyy JavaScriptCore/kjs/grammar.y -o grammar.tab.c && mv grammar.tab.c tmp/grammar.cpp && mv grammar.tab.h tmp/grammar.h
JavaScriptCore/kjs/grammar.y:364.3-366.9: type clash (`node' `') on default action
JavaScriptCore/kjs/grammar.y:366.10: parse error, unexpected ":", expecting ";" or "|"

This error is caused by having an incompatible version of bison installed. The single reported case of this error occurred with bison 1.75, and was resolved by updating to bison 2.3.

Missing Phonon

In file included from ../../../WebCore/platform/graphics/MediaPlayer.cpp:46:
../../../WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.h:27:29:
error: phononnamespace.h: No such file or directory
In file included from ../../../WebCore/platform/graphics/MediaPlayer.cpp:46:
../../../WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.h:120:
error: ‘Phonon::State’ has not been declared
../../../WebCore/platform/graphics/qt/MediaPlayerPrivatePhonon.h:120:
error: ‘Phonon::State’ has not been declared

This error is caused by not having Phonon installed. Install the development version to resolve.

Missing fontconfig

error: fontconfig/fontconfig.h: No such file or directory

Install fontconfig-dev (libfontconfig-dev).

Outdated Mesa library

../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp: In member function ‘void WebCore::BitmapTextureGL::bind()’:
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:581:9: error: ‘GL_RENDERBUFFER’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:585:9: error: ‘GL_RENDERBUFFER’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:585:9: error: ‘GL_DEPTH_STENCIL’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:587:9: error: ‘GL_FRAMEBUFFER’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:589:9: error: ‘GL_RENDERBUFFER’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:590:9: error: ‘GL_FRAMEBUFFER’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:590:9: error: ‘GL_COLOR_ATTACHMENT0’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:591:9: error: ‘GL_FRAMEBUFFER’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:591:9: error: ‘GL_STENCIL_ATTACHMENT’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:591:9: error: ‘GL_RENDERBUFFER’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:600:9: error: ‘GL_FRAMEBUFFER’ was not declared in this scope
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp: In member function ‘virtual void WebCore::TextureMapperGL::bindSurface(WebCore::BitmapTexture*)’:
../../../Source/WebCore/platform/graphics/opengl/TextureMapperGL.cpp:646:9: error: ‘GL_FRAMEBUFFER’ was not declared in this scope

Update the Mesa OpenGL library (libgl1-mesa-dev on Debian systems).

Dependencies for specific Linux distributions

Ubuntu Oneiric (11.10) Linux - the simplest way

Install sedkit-env-qtwebkit package from this PPA: https://launchpad.net/~u-szeged/+archive/sedkit to install all required dependencies.

Download, build and install Qt 5 - http://qt-project.org/downloads


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值