
1. 环境准备与依赖安装在Ubuntu 18.04上编译WPEWebKit确实是个技术活这个老系统和新引擎的组合就像让传统燃油车跑新能源系统需要解决不少兼容性问题。我去年在嵌入式设备上部署WPEWebKit时花了整整三天时间才搞定所有依赖这里把踩过的坑都总结给你。首先得把系统基础环境搭好。Ubuntu 18.04默认的软件源太旧很多新库都没有建议先更新源sudo apt update sudo apt upgrade -y sudo add-apt-repository ppa:ubuntu-toolchain-r/test sudo apt install software-properties-common核心依赖包要分批次安装我习惯把它们分成三类编译工具链gcc-8、g-8必须用8版本太高会出问题、cmake、ninja-build、meson基础库libglib2.0-dev、libsoup2.4-dev、libsqlite3-dev、libjpeg-dev多媒体支持gstreamer1.0-plugins-base、gstreamer1.0-plugins-good、libgstreamer1.0-dev实际安装命令这样写更稳妥sudo apt install -y \ gcc-8 g-8 \ cmake ninja-build meson \ libglib2.0-dev libsoup2.4-dev \ libgstreamer1.0-dev \ libwayland-dev xorg-dev \ libxt-dev libwoff2-dev \ libopenjp2-7-dev \ libsecret-1-dev有个特别容易忽略的点是GStreamer的版本。Ubuntu 18.04默认安装的是1.14版本但WPEWebKit 2.32需要至少1.16的特性。我建议手动编译安装GStreamer 1.18wget https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-1.18.6.tar.xz tar -xf gstreamer-1.18.6.tar.xz cd gstreamer-1.18.6 meson build --prefix/usr/local ninja -C build sudo ninja -C build install2. 源码获取与目录结构WPEWebKit的编译需要四个核心组件协同工作就像搭积木一样缺一不可。我建议在用户目录下创建专门的工作空间mkdir -p ~/wpe/{source,inst} cd ~/wpe/source组件下载有讲究不是越新越好。经过多次测试这个组合最稳定libwpe-1.10.0.tar.xzwpebackend-fdo-1.6.0.tar.xzwpewebkit-2.32.0.tar.xzcog-0.5.1.tar.xz下载后解压要注意保留版本号后缀方便后续管理for pkg in *.tar.xz; do tar -xf $pkg; done目录结构最终应该是这样的~/wpe ├── source │ ├── libwpe-1.10.0 │ ├── wpebackend-fdo-1.6.0 │ ├── wpewebkit-2.32.0 │ └── cog-0.5.1 └── inst ├── bin ├── lib └── include3. 分步编译指南3.1 libwpe编译libwpe是基础图形抽象层相当于WebKit的地基。编译时要注意三点必须指定Debug模式方便排错安装路径要统一生成编译命令数据库具体操作cd libwpe-1.10.0 mkdir build cd build cmake .. \ -DCMAKE_EXPORT_COMPILE_COMMANDSYES \ -DCMAKE_BUILD_TYPEDebug \ -DCMAKE_INSTALL_PREFIX~/wpe/inst make -j$(nproc) make install验证是否成功ls ~/wpe/inst/lib/libwpe-1.0.so3.2 wpebackend-fdo编译这个后端负责与显示系统交互需要特别注意Wayland协议cd wpebackend-fdo-1.6.0 mkdir build cd build cmake .. \ -DCMAKE_INSTALL_PREFIX~/wpe/inst \ -DCMAKE_PREFIX_PATH~/wpe/inst make -j$(nproc) make install常见问题是找不到wayland-protocols解决方法wget http://archive.ubuntu.com/ubuntu/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb sudo dpkg -i wayland-protocols_1.20-1_all.deb3.3 WPEWebKit编译这是最复杂的部分关键是要处理C版本兼容问题。我的配置方案cd wpewebkit-2.32.0 ./Tools/wpe/install-dependencies mkdir build cd build cmake .. \ -GNinja \ -DPORTWPE \ -DCMAKE_BUILD_TYPEDebug \ -DCMAKE_INSTALL_PREFIX~/wpe/inst \ -DCMAKE_CXX_FLAGS-fpermissive \ -DENABLE_MINIBROWSERON \ -DUSE_WPE_BACKEND_FDO1.6 \ -DWPE_INCLUDE_DIR~/wpe/inst/include/wpe-1.0 \ -DUSE_SOUP2ON几个关键参数说明-fpermissive放宽C标准检查-USE_SOUP2ON强制使用libsoup2-GNinja使用更快的ninja构建系统编译命令ninja -j$(nproc) ninja install4. 常见问题解决方案4.1 GStreamer API不兼容典型错误error: braces around scalar initializer for type gboolean (*)(GstAppSink*, gpointer)这是因为GStreamer 1.18新增了事件回调接口。修改方法找到报错文件通常是ImageDecoderGStreamer.cpp在GstAppSinkCallbacks结构体末尾添加nullptrstatic GstAppSinkCallbacks callbacks { nullptr, [](GstAppSink* sink, gpointer userData) - GstFlowReturn { return static_castAudioSourceProviderGStreamer*(userData)-handleSample(sink, true); }, [](GstAppSink* sink, gpointer userData) - GstFlowReturn { return static_castAudioSourceProviderGStreamer*(userData)-handleSample(sink, false); }, nullptr, // 新增的事件回调 { nullptr } };4.2 C11标准冲突遇到constexpr相关错误时修改Internals.cppconstexpr TreeType convertType(Internals::TreeType type) { switch (type) { case Internals::Tree: return Tree; case Internals::ShadowIncludingTree: return ShadowIncludingTree; case Internals::ComposedTree: return ComposedTree; } return Tree; // 移除ASSERT_NOT_REACHED() }4.3 Wayland协议缺失当出现text-input-unstable-v3错误时wget http://archive.ubuntu.com/ubuntu/pool/main/w/wayland-protocols/wayland-protocols_1.20-1_all.deb sudo dpkg -i wayland-protocols_1.20-1_all.deb5. 运行与调试5.1 环境变量配置在~/.bashrc中添加export PATH$PATH:~/wpe/inst/bin export LD_LIBRARY_PATH$LD_LIBRARY_PATH:~/wpe/inst/lib export PKG_CONFIG_PATH$PKG_CONFIG_PATH:~/wpe/inst/lib/pkgconfig5.2 启动Weston合成器新建终端执行weston --socketwpe --width1280 --height720在新启动的Weston终端中运行export LD_LIBRARY_PATH~/wpe/inst/lib cog --platformfdo https://www.baidu.com5.3 X11模式运行如果需要X11支持需要编译cog 0.10.0cmake .. \ -DCMAKE_BUILD_TYPEDebug \ -DCMAKE_INSTALL_PREFIX~/wpe/inst \ -DCOG_PLATFORM_X11ON \ -GNinja运行时指定平台cog --platformx11 https://example.com5.4 调试技巧启用详细日志export GST_DEBUG3,webkit*:7 export WEBKIT_FORCE_SANDBOX0 cog --platformfdo https://example.com如果遇到段错误用gdb调试gdb --args cog --platformfdo https://example.com (gdb) r (gdb) bt full