跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客我的书AI学习GitHub 精选镜像AI 生图工具UI配色美学关于
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
C++大前端算法

Qt 配置 WebAssembly 环境

前言 WebAssembly 是一种可在现代 Web 浏览器中运行的编码方式。它是一种低级的类汇编语言,具有紧凑的二进制格式,可接近原生性能运行,并为 C/C++、C# 和 Rust 等语言提供编译目标,使其能在 Web 上运行。它被设计为与 JavaScript 共存,允许两者协同工作。 简而言之,对于网页上对性能有特殊需求的场景(如数学矩阵计算、FFT 等),可以尝试 WebAssembly。…

小熊软糖发布于 2026/4/6更新于 2026/9/107K 浏览

前言

WebAssembly 是一种可在现代 Web 浏览器中运行的编码方式。它是一种低级的类汇编语言,具有紧凑的二进制格式,可接近原生性能运行,并为 C/C++、C# 和 Rust 等语言提供编译目标,使其能在 Web 上运行。它被设计为与 JavaScript 共存,允许两者协同工作。

简而言之,对于网页上对性能有特殊需求的场景(如数学矩阵计算、FFT 等),可以尝试 WebAssembly。与调用服务器相比,WebAssembly 在本地计算,减少了网络传输损耗和服务器资源消耗,在响应速度和体验上可能有显著提升。

本文基于 Qt 5.15.2 和 6.8.3 版本验证通过。

一、WebAssembly 是什么?

WebAssembly 为 Web 平台提供了多种语言编写的代码以接近原生速度运行的途径,使得以前无法在 Web 上运行的客户端应用程序得以在 Web 上运行。

通过使用 WebAssembly 的 JavaScript API,可以将 WebAssembly 模块加载到 JavaScript 应用中,并在两者之间共享功能。这允许在同一个应用中利用 WebAssembly 的性能和能力以及 JavaScript 的表达力和灵活性。

二、下载并配置 emsdk

1. 下载源代码

git clone https://github.com/emscripten-core/emsdk.git
# 国内用户建议使用 Gitee 镜像
git clone https://gitee.com/anold/emsdk.git

2. 配置环境

cd emsdk
./emsdk install latest
./emsdk activate latest

执行 ./emsdk activate latest 后会提示设置环境变量。emsdk 需要编译工具链,以及 Java、Python、Node 等环境协同工作,这些环境已包含在 emsdk 中。

环境变量配置示例

用户变量

配置示例

配置示例

PATH 路径

配置示例

请根据实际路径修改。

三、配置 Qt 环境

Qt Creator 支持 WebAssembly 构建,暂不支持 Clion 等其他 IDE。

注意:先配置环境变量再打开 Creator,会自动读取环境变量。

1. 设置 SDKs

编辑 -> 设置 -> SDKs -> WebAssembly

配置示例

应用 -> 确定。

2. 查看构建套件

编辑 -> 设置 -> 构建套件 (Kit)

配置示例

若显示相同则配置成功。

四、测试 Demo

示例项目 SplitterDemo,具体代码与平常创建 Qt Widgets 项目一致。构建套件选择 WebAssembly 6.8.3 multithread 即可。

配置示例

编译并等待结束。

五、部署

1. 部署 Nginx 环境

需要 Nginx 环境,因为 Nginx 部署配置 WebAssembly 是最简单的。其他方法可能涉及 JS 配置。

建议 Nginx 版本不低于 1.26.3,太低的版本 mime.types 文件里可能没有对 application/wasm 的支持。Windows 和 Linux 均可,所有特性跨平台。

2. 部署 WebAssembly 程序

编译完成后在编译目录生成几个文件,这些文件是对 .wasm 的包装,无需手动编写 .js 文件。

将这些文件全部复制到一个 Nginx 能访问的目录下,在 nginx.conf 或其他配置方式中配置网页访问。示例如下:

server {
    listen 8080;
    server_name localhost;
    # access_log /var/log/nginx/host.access.log main;
    location /Webassemble {
        add_header Cross-Origin-Embedder-Policy "require-corp" always;
        add_header Cross-Origin-Opener-Policy "same-origin" always;
        alias /var/www/Webassemble/;
        try_files $uri $uri/ /SpliterDemo.html;
    }
    # error_page 404 /404.html;
    # redirect server error pages to the static page /50x.html
    # error_page 500 502 503 504 /50x.html;
    location = /50x.html {
        root /usr/share/nginx/html;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    # location ~ \.php$ {
    #     proxy_pass http://127.0.0.1;
    # }
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    # location ~ \.php$ {
    #     root html;
    #     fastcgi_pass 127.0.0.1:9000;
    #     fastcgi_index index.php;
    #     fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
    #     include fastcgi_params;
    # }
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    # location ~ \.ht {
    #     deny all;
    # }
}

完成后重启 Nginx。Windows 需重启 Nginx 进程,Linux 执行 sudo nginx -s reload 即可。

在 Chrome 浏览器中访问:

http://127.0.0.1:8080/Webassemble/SpliterDemo.html

配置示例

编译结果与 Creator 中类似,仅缺少标题栏。性能表现良好。

注意:以下两句配置必须加上,否则浏览器会报无法申请 SharedArrayBuffer 的错误(与浏览器安全策略有关):

add_header Cross-Origin-Embedder-Policy "require-corp" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;

参考:SharedArrayBuffer

总结

  1. 环境配置对初学者有一定挑战性,按步骤操作即可。
  2. 适用场景相对特定,多数情况下可能遇不到,可作为备选方案。WebAssembly 主要用于完成耗时计算(如数学矩阵、快速傅里叶变换等),而非开发复杂 GUI。虽然目前未发现不支持的功能,但建议进一步测试。

若项目主体为 JS 开发,但存在复杂计算模块且 JS 无法满足性能需求,或对网络延迟容忍度低,不适合通过服务器中间计算返回,此时 WebAssembly 可发挥作用。

目录

  1. 前言
  2. 一、WebAssembly 是什么?
  3. 二、下载并配置 emsdk
  4. 1. 下载源代码
  5. 国内用户建议使用 Gitee 镜像
  6. 2. 配置环境
  7. 环境变量配置示例
  8. 三、配置 Qt 环境
  9. 1. 设置 SDKs
  10. 2. 查看构建套件
  11. 四、测试 Demo
  12. 五、部署
  13. 1. 部署 Nginx 环境
  14. 2. 部署 WebAssembly 程序
  15. 总结

更多推荐文章

查看全部
  • Java 中基于属性的访问控制(ABAC):动态上下文感知权限管理
  • 硕士论文盲审降 AI 率指南:评委视角下的 AIGC 报告处理
  • 利用 Maven Javadoc 插件生成项目 API 文档
  • DevEco Studio 动态修改编译配置指南
  • 前端 AI 工具实战:Claude Code、OpenCode 与 A2UI 协议解析
  • Openclaw 开源仿生机械爪:原理、应用与生态解析
  • DFT Scan & ATPG 中的 OCC 架构设计详解
  • Android 高级工程师面试核心知识点与高频题库解析
  • 基于腾讯云轻量应用服务器部署 OpenClaw 并接入 IM 机器人
  • OpenClaw 实战:持久记忆与 RAG 知识库构建
  • 将 Zed 编辑器集成到 Bright Data Web MCP
  • JavaScript 基础:变量、DOM、表单与定时器
  • 计算机视觉面试题精讲:核心算法与代码实现
  • 2026 年 3 月大模型全景解析:国产登顶、百万上下文与 Agent 工业化
  • System Verilog 核心教程:从基础语法到验证架构
  • 第二届人工智能、虚拟现实与交互设计国际学术会议(AIVRID 2026)
  • TRAE 中国版 SOLO 模式全量免费开放,重塑 AI 编程流程
  • Windows 系统提示找不到文件 javaw.exe 的解决方案
  • 基于 Coze 工作流实现“葬经人”风格动画短视频自动生成
  • 前端工程师转型 AI Agent 开发工程师完整学习路线

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Base64 字符串编码/解码

    将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online

  • Base64 文件转换器

    将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online

  • Markdown转HTML

    将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online

  • HTML转Markdown

    将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online