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

Qt 配置 WebAssembly 环境

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

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

前言

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. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • Win11 PowerShell 配置 SSH 密钥实现无密码访问 Linux 服务器
  • AI 编程工具深度对比:Cursor、Copilot、Trae 与 Claude Code
  • B 站 PC 端 Web 自动开启字幕脚本(2025 新版适配)
  • 9款AI论文工具横向对比与使用指南
  • 基于ESP32-C3的RISC-V智能家居中控实战
  • OpenClaw 接入 iCloud 云端方案替代实体 Mac Mini
  • MySQL 环境配置实战:CentOS 7 与 Ubuntu 双系统安装指南
  • 极化码 SC 译码算法原理、MATLAB 实现与优化策略
  • OpenClaw 本地 AI 智能体:从入门部署到实战应用
  • 无人机航拍图像处理:目标跟踪与场景重建
  • 基于 SSM 和 Vue 的在线投稿系统设计与实现
  • 用老 Mac 跑本地 AI:OpenClaw 环境一键搭建
  • 算法模板精讲:一维与二维前缀和实现及原理
  • 西门子 S7-1200 PLC 与爱普生机器人 Modbus TCP 通讯配置
  • MicroPE 基于 NVMe 启动运行 GLM-4.6V-Flash-WEB 的本地 AI 部署实践
  • 机器人顶会“灵巧手”(dexterous hand)论文集合 RSS CoRL ICRA IROS 2025
  • 基于 Langchain4j 的 Java AI 医疗助手开发实战
  • crypto-js JavaScript 加密标准库使用指南
  • 2026年全球AI大模型深度研究报告
  • C++ 与 ROS 中 int main(int argc, char* argv[]) 的区别

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如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