Logo
  • 介绍 Emscripten
    • 关于 Emscripten
      • Emscripten 工具链
      • 将代码移植到 Emscripten
    • 社区
      • 联系我们
      • 报告 Bug
      • 贡献
    • 开源许可证
    • 发行说明
    • 演讲和出版物
      • 演示文稿
      • 论文
      • 书籍
  • 入门
    • 下载和安装
      • 使用 emsdk 的安装说明(推荐)
        • Emsdk 安装目标
        • 平台特定说明
      • 验证安装
      • 更新 SDK
      • 卸载 Emscripten SDK
      • 使用 Docker 镜像
      • 使用非官方软件包安装
    • Emscripten 教程
      • 首先
      • 验证 Emscripten
      • 运行 Emscripten
      • 生成 HTML
      • 使用文件
      • 优化代码
      • Emscripten 测试套件和基准测试
      • 一般提示和后续步骤
    • Emscripten 测试套件
      • 设置
      • 运行测试
      • 跳过测试
      • 第一次失败时退出
      • 运行大量随机测试
      • 重要测试
      • 基准测试
      • 调试测试失败
    • Bug 报告
      • LLVM、wasm-ld、clang、Binaryen Bug
      • 网站和文档 Bug
    • 常见问题解答
      • 如何编译代码?
      • 为什么我在构建基本代码和测试时会遇到错误?
      • 我尝试了一些东西:为什么它不起作用?
      • 我需要更改我的构建系统以使用 Emscripten 吗?
      • 为什么代码编译速度很慢?
      • 为什么我的代码运行速度很慢?
      • 为什么我编译的代码很大?
      • 为什么在另一台机器上运行的代码在我的机器上编译时会报错?
      • 如何减少启动时间?
      • 如何运行本地 Web 服务器进行测试 / 为什么我的程序在“下载中...”或“准备中...”中停滞?
      • 为什么链接时出现 machine type must be wasm32 或 unknown file type?
      • 为什么我的代码无法编译,并出现有关内联汇编的错误消息(或 {"text":"asm"})?
      • 为什么我的 HTML 应用程序挂起?
      • 如何运行事件循环?
      • 为什么我的 SDL 应用程序无法工作?
      • 如何链接到系统库,例如 SDL、boost 等?
      • 我有哪些音频播放选项?
      • 我的编译程序如何访问文件?
      • 为什么我的代码无法访问同一目录中的文件?
      • 如何判断页面完全加载以及何时可以安全调用已编译函数?
      • “退出运行时”是什么意思?为什么 atexit()s 不会运行?
      • 为什么当我编译到 WebAssembly 时,C/C++ 源代码中的函数会消失?
      • 为什么当我使用 closure 构建时,文件系统 API 不可使用?
      • 为什么我的代码在使用 -O2 --closure 1 时会中断并出现奇怪的错误?
      • 为什么出现 TypeError: Module.someThing is not a function?
      • 为什么 Runtime 不再存在?为什么我在尝试访问 Runtime.someThing 时出现错误?
      • 为什么我使用 -s 选项时出现 NameError 或 a problem occurred in evaluating content after a -s"?
      • 如何在 CMake 项目中指定 -s 选项?
      • 为什么我在 file=.. 或以 f'..' 开头的字符串上出现 Python SyntaxError: invalid syntax?
      • 为什么我在优化时遇到堆栈大小错误:RangeError: Maximum call stack size exceeded 或类似错误?
      • 如何将 int64_t 和 uint64_t 值从 js 传递到 Wasm 函数?
      • 我可以在一个网页上使用多个 Emscripten 编译的程序吗?
      • 我可以构建仅在 Web 上运行的 JavaScript 吗?
      • 为什么项目的名称很奇怪?
  • 编译和运行项目
    • 构建项目
      • 与构建系统集成
      • Emscripten 链接器输出文件
      • 使用优化构建项目
      • 使用调试信息构建项目
      • 使用库
      • Emscripten 移植
        • Contrib 移植
        • 添加更多移植
        • 外部移植
      • 构建系统问题
        • 构建系统自执行
        • 伪动态链接
        • Configure 可能会运行一些似乎失败的检查
        • 存档(.a)文件
      • 手动使用 emcc
      • 在预处理器中检测 Emscripten
      • 使用编译器包装器
      • pkg-config
      • 示例 / 测试代码
      • 疑难解答
    • 构建到 WebAssembly
      • 设置
        • 后端
      • 陷阱
      • 编译器输出
      • 浏览器中的 WebAssembly 支持
      • .wasm 文件和编译
      • Web 服务器设置
    • 动态链接
      • 背景
      • 动态链接概述
      • 实际细节
        • 加载时动态链接
        • 使用 dlopen() 的运行时动态链接
      • 代码大小
      • 系统库
      • 杂项说明
        • 动态检查
        • 限制
        • Pthreads 支持
    • 使用 emrun 运行 HTML 文件
      • 功能
      • 快速入门
      • 选择要运行的浏览器
      • 安全隐患
      • 控制 Web 服务器操作
      • 控制日志输出
      • 运行后清理
      • 在 Firefox 中运行网页
      • 在 Android 设备上运行网页
    • 部署 Emscripten 编译的页面
      • 构建文件和自定义 Shell
      • 优化下载大小
      • 优化页面启动时间
      • 提供快速第二次加载
      • 为已编译代码保留内存
      • 稳健的错误处理
      • 准备 Web 环境
    • 在 GitLab 上构建和部署
      • 一个示例 .gitlab-ci.yml
    • Emscripten Contrib 移植
      • contrib.glfw3
  • 移植
    • 代码可移植性和限制
      • 可移植性指南
        • 当前 Web 限制
        • 无法编译的代码
        • 可以编译但可能运行速度很慢的代码
        • 其他问题
      • API 限制
        • 网络
        • 文件系统
        • 应用程序主循环
        • 其他 API
      • 函数指针问题
        • 调试函数指针问题
        • 解决函数指针问题
      • 特定浏览器限制
    • Emscripten 运行时环境
      • 输入/输出
      • 文件系统
      • 浏览器主循环
        • 在 C/C++ 中实现异步主循环
        • 使用 Asyncify 向浏览器让步
      • 执行生命周期
      • Emscripten 内存表示
    • 连接 C++ 和 JavaScript
      • 与代码交互
        • 使用 ccall/cwrap 从 JavaScript 调用已编译的 C 函数
        • 从 NodeJS 交互使用用 C/C++ 编写的 API
        • 从 JavaScript “直接”调用已编译的 C/C++ 代码
        • 从 C/C++ 调用 JavaScript
        • 在 JavaScript 中实现 C API
        • 从 C 将 JavaScript 函数作为函数指针调用
        • 函数签名
        • 从 JavaScript 访问内存
        • 影响执行行为
        • 环境变量
        • 绑定 C++ 和 JavaScript — WebIDL Binder 和 Embind
        • 绑定 C/C++ 和 JavaScript - Node-API
      • Embind
        • 一个简单的示例
        • 绑定库
        • 类
        • 内存管理
        • 值类型
        • 高级类概念
        • 重载函数
        • 枚举
        • 常量
        • 类属性
        • 内存视图
        • 使用 val 将 JavaScript 转换为 C++
        • 内置类型转换
        • TypeScript 定义
        • 性能
      • WebIDL Binder
        • 一个简单的示例
        • 模块化输出
        • 在 JavaScript 中使用 C++ 类
        • 属性
        • 指针、引用、值类型(Ref 和 Value)
        • Const
        • 不可删除的类(NoDelete)
        • 定义内部类和命名空间内的类(Prefix)
        • 运算符
        • 枚举
        • 在 JavaScript 中子类化 C++ 基类(JSImplementation)
        • 指针和比较
        • NULL
        • void*
        • WebIDL 类型
        • 测试和示例代码
    • 文件和文件系统
      • 文件系统概述
        • Emscripten 文件系统运行时环境
        • Emscripten 文件系统架构
      • 打包文件
        • 使用 emcc 打包
        • 使用文件打包工具打包
        • 更改数据文件位置
        • 在虚拟文件系统中修改文件位置
        • 有效字符集
        • 监控文件使用情况
        • 预加载文件
        • 测试代码
      • 同步虚拟 XHR 支持的文件系统使用
        • 测试代码
        • 说明
    • 多媒体和图形
      • Emscripten 中的 EGL 支持
        • EGL 不是什么?
        • 如何使用 EGL 创建 WebGL 上下文?
        • 实现状态和说明
      • Emscripten 中的 OpenGL 支持
        • OpenGL ES 2.0/3.0 的 WebGL 友好子集
        • OpenGL ES 2.0/3.0 模拟
        • 旧版桌面 OpenGL API 功能的模拟
        • OpenGL ES 扩展
        • 测试代码/示例
        • Bug 报告
    • 音频
      • 支持的 OpenAL 扩展
      • Emscripten 上音频的指南
      • Emscripten 特定的捕获行为
      • OpenAL 捕获的有用实现细节
      • 改进和扩展实现
    • 调试
      • 在浏览器中调试
      • 调试模式(EMCC_DEBUG)
      • 编译器设置
      • 消毒剂
      • emcc 详细输出
      • 手动打印调试
      • 使用 Chrome Devtools 调试
      • 从 JavaScript 处理 C++ 异常
      • Emscripten 特定的问题
        • 内存对齐问题
        • 函数指针问题
        • 无限循环
      • 分析
        • 速度
        • 内存
      • AutoDebugger
        • AutoDebugger 回归工作流程
      • 有用链接
      • 需要帮助?
    • Pthreads 支持
      • 使用启用 pthreads 的编译
      • 其他标志
      • 代理
      • 在浏览器主线程上阻塞
      • 特殊注意事项
      • 分配器性能
      • 运行代码和测试
    • 网络
      • Emscripten WebSockets API
      • 通过 WebSockets 模拟 POSIX TCP 套接字
      • 通过 WebSocket 代理服务器实现完整的 POSIX 套接字
      • XmlHttpRequests 和 Fetch API
      • WebRTC 和 UDP
    • 使用 SIMD 与 WebAssembly
    • GCC/Clang SIMD 向量扩展
    • WebAssembly SIMD 内在函数
    • 限制和行为差异
    • 优化注意事项
    • 编译针对 x86 SSE* 指令集的 SIMD 代码
    • 编译针对 ARM NEON 指令集的 SIMD 代码
    • C++ 异常支持
      • Emscripten(基于 JavaScript)异常支持
      • 基于 WebAssembly 异常处理的支持
      • 调试异常
        • 堆栈跟踪
        • 从 JavaScript 处理 C++ 异常
      • 使用异常和 setjmp-longjmp 结合
    • C setjmp-longjmp 支持
      • 基于 JavaScript 的 setjmp-longjmp 支持
      • 基于 WebAssembly 异常处理的 setjmp-longjmp 支持
      • 使用异常和 setjmp-longjmp 结合
    • 异步代码
      • 休眠 / 让步给事件循环
      • 使异步 Web API 行为像同步一样
      • 在旧引擎中使用 Asyncify API 的方法
      • 关于 ASYNCIFY_IMPORTS 的更多信息
      • 使用动态链接的 Asyncify
      • 与 Embind 的用法
      • 与 ccall 的用法
      • Asyncify 和 JSPI 之间的差异
      • 优化 Asyncify
      • 潜在问题
        • 堆栈溢出 (Asyncify)
        • 可重入性
        • 在堆栈上使用编译代码开始倒带 (Asyncify)
      • 从旧的 Asyncify API 迁移
    • 构建项目
      • 与构建系统集成
      • Emscripten 链接器输出文件
      • 使用优化构建项目
      • 使用调试信息构建项目
      • 使用库
      • Emscripten 移植
        • Contrib 移植
        • 添加更多移植
        • 外部移植
      • 构建系统问题
        • 构建系统自执行
        • 伪动态链接
        • Configure 可能会运行一些似乎失败的检查
        • 存档(.a)文件
      • 手动使用 emcc
      • 在预处理器中检测 Emscripten
      • 使用编译器包装器
      • pkg-config
      • 示例 / 测试代码
      • 疑难解答
  • API 参考
    • emscripten.h
      • 内联汇编/JavaScript
        • 定义
      • 从 C/C++ 调用 JavaScript
        • 回调的函数指针类型
        • 函数
      • 浏览器执行环境
        • 函数
      • 异步文件系统 API
        • 类型定义
        • 函数
      • 异步 IndexedDB API
      • 编译
      • Worker API
        • 类型定义
        • 函数
      • 日志记录实用程序
        • 定义
        • 函数
      • 套接字事件注册
        • 回调函数
        • 函数
      • 未对齐类型
        • 类型定义
      • 伪同步函数
        • 休眠
        • 网络
        • IndexedDB
      • Asyncify 函数
        • 类型定义
        • 函数
      • ABI 函数
    • html5.h
      • 如何使用此 API
        • 注册函数
        • 回调函数
        • 受网络安全影响的函数
        • 测试/示例代码
      • 通用类型
      • 函数结果值
      • 键
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 鼠标
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 滚轮
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • UI
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 焦点
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 设备方向
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 设备运动
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 方向
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 全屏
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 指针锁定
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 可见性
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 触摸
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 游戏手柄
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 电池
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 振动
        • 函数
      • 页面卸载
        • 定义
        • 回调函数
        • 函数
      • WebGL 上下文
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • CSS
        • 函数
      • 动画和计时
        • 函数
      • 抛出
        • 函数
    • console.h
      • 函数
    • preamble.js
      • 从 JavaScript 调用编译的 C 函数
      • 访问内存
      • 转换函数 - 字符串、指针和数组
      • 运行依赖项
      • 堆栈跟踪
      • 内存模型的类型访问器
    • 文件系统 API
      • 新的文件系统:WasmFS
      • 包含文件系统支持
      • 持久数据
      • 文件系统
        • MEMFS
        • NODEFS
        • NODERAWFS
        • IDBFS
        • WORKERFS
        • PROXYFS
      • 设备
      • 设置标准 I/O 设备
      • 文件系统 API
      • 文件类型
      • 路径
    • Fetch API
      • 简介
      • 持久化数据
        • 从内存中持久化数据字节
        • 从 IndexedDB 中删除文件
      • 同步 Fetch
      • 跟踪进度
      • 管理大型文件
        • 直接下载到 IndexedDB
        • 流式下载
        • 字节范围下载
      • 待文档化
    • 模块对象
      • 创建模块对象
      • 编译设置
      • 影响执行
      • 其他方法
    • val.h
    • bind.h (正在建设中)
      • 如何使用此 API
        • 定义
      • 策略
      • select_overload 和 select_const
      • 函数
      • 值元组
      • 值结构体
      • 智能指针
      • 类
      • 向量
      • 映射
      • 枚举
      • 常量
    • trace.h
      • 用法
        • 编译器交互
        • 初始化和拆卸
        • 上下文
        • 帧
        • 标注分配
        • 总体内存使用情况
        • 记录消息
        • 任务
        • 报告错误
      • 运行服务器
      • 设计说明
        • 客户端/服务器设计
        • 数据批处理
        • 不要干扰堆
      • 函数
    • fiber.h
      • API 参考
        • 类型
        • 函数
    • proxying.h
      • API 参考
        • 类型
        • 函数
        • C++ API
    • stack.h
    • Wasm Worker API
      • 快速示例
      • 简介
      • Pthreads 与 Wasm Workers:哪个应该使用?
        • Pthreads 可以代理 JS 函数
        • Pthreads 具有取消点
        • Pthreads 可能同步启动 - Wasm Workers 总是异步启动
        • Pthread 拓扑结构是扁平的 - Wasm Workers 是层次化的
        • Pthreads 可以使用 Wasm Worker 同步 API,反之则不行
        • Pthreads 具有“线程主”函数和 atexit 处理程序
        • Pthreads 具有每个线程的传入代理消息队列,Wasm Workers 没有
        • Pthreads 同步挂钟时间
        • 输入事件 API 仅向 pthreads 反向代理
        • Pthread 与 emscripten_lock 实现差异
        • 内存需求
        • 生成的代码大小
        • API 差异
      • Wasm Workers 堆栈大小注意事项
      • Wasm Workers 与早期 Emscripten Worker API
      • 限制
      • 示例代码
    • Wasm Audio Worklets API
      • 开发概述
      • 编程示例
      • 将音频线程与主线程同步
      • 更多示例
    • 高级 API
      • settings.js
      • preamble.js
      • 高级文件系统 API
  • 工具参考
    • Emscripten SDK (emsdk)
      • 命令行语法
        • 参数
        • 工具和 SDK 目标
      • SDK 概念
      • Emscripten 编译器配置文件 (.emscripten)
      • “如何”指南
        • 如何获得最新的 SDK?
        • 如何使用 emsdk?
        • 如何检查已安装的 SDK 和工具版本?
        • 如何安装工具/SDK 版本?
        • 如何删除工具或 SDK?
        • 如何检查 Emscripten SDK 的更新?
        • 如何更改当前活动的 SDK 版本?
        • 如何安装和激活旧的 Emscripten SDK 和工具?
        • 如何跟踪 SDK 的最新变化?
        • 如何在 SDK 中使用自己的 Emscripten 分支?
    • Emscripten 编译器前端 (emcc)
      • 命令行语法
        • 参数
      • 环境变量
    • Emscripten Windows 命令提示符 (emcmdprompt.bat)
      • 命令行语法
    • Emscripten 编译器设置
      • 断言
      • 堆栈溢出检查
      • 检查空写入
      • 详细
      • 调用运行
      • 退出运行时
      • 堆栈大小
      • malloc
      • 中止 malloc
      • 初始堆
      • 初始内存
      • 最大内存
      • 允许内存增长
      • 内存增长几何步长
      • 内存增长几何上限
      • 内存增长线性步长
      • MEMORY64
      • 初始表
      • 允许表增长
      • 全局基址
      • 表基址
      • 使用闭包编译器
      • 闭包警告
      • 忽略闭包编译器错误
      • 声明 ASM 模块导出
      • 内联限制
      • 支持大端序
      • 安全堆
      • 安全堆日志
      • 模拟函数指针转换
      • 异常调试
      • 反解支持
      • 库调试
      • 系统调用调试
      • 套接字调试
      • 动态链接调试
      • 文件系统调试
      • 套接字 WebRTC
      • WebSocket URL
      • 代理 POSIX 套接字
      • WebSocket 子协议
      • OpenAL 调试
      • WebSocket 调试
      • GL 断言
      • 跟踪 WebGL 调用
      • GL 调试
      • GL 测试
      • GL 最大临时缓冲区大小
      • GL 不安全选项
      • 完整 ES2
      • GL 模拟 GLES 版本字符串格式
      • GL 扩展名使用前缀格式
      • GL 支持自动启用扩展名
      • GL 支持简单启用扩展名
      • GL 跟踪错误
      • GL 支持显式交换控制
      • GL 池临时缓冲区
      • GL 显式制服位置
      • GL 显式制服绑定
      • 使用 WebGL2
      • 最小 WebGL 版本
      • 最大 WebGL 版本
      • WebGL2 向后兼容性模拟
      • 完整 ES3
      • 旧版 GL 模拟
      • GL 仅 FFP
      • GL 预初始化上下文
      • 使用 WebGPU
      • STB_IMAGE
      • GL 如果损坏,则禁用半浮点扩展名
      • GL 解决 Safari getcontext 错误
      • GL 启用 getproc 地址
      • JS_MATH
      • 填充旧的数学函数
      • 旧版 VM 支持
      • 环境
      • LZ4
      • 禁用异常捕获
      • 允许异常捕获
      • 禁用异常抛出
      • 导出异常处理帮助程序
      • 异常堆栈跟踪
      • WASM_EXNREF
      • NODEJS_CATCH_EXIT
      • NODEJS_CATCH_REJECTION
      • ASYNCIFY
      • ASYNCIFY_IMPORTS
      • ASYNCIFY_IGNORE_INDIRECT
      • ASYNCIFY_STACK_SIZE
      • ASYNCIFY_REMOVE
      • ASYNCIFY_ADD
      • ASYNCIFY_PROPAGATE_ADD
      • ASYNCIFY_ONLY
      • ASYNCIFY_ADVISE
      • ASYNCIFY_LAZY_LOAD_CODE
      • ASYNCIFY_DEBUG
      • ASYNCIFY_EXPORTS
      • JSPI
      • JSPI_EXPORTS
      • JSPI_IMPORTS
      • EXPORTED_RUNTIME_METHODS
      • EXTRA_EXPORTED_RUNTIME_METHODS
      • INCOMING_MODULE_JS_API
      • CASE_INSENSITIVE_FS
      • FILESYSTEM
      • FORCE_FILESYSTEM
      • NODERAWFS
      • NODE_CODE_CACHING
      • EXPORTED_FUNCTIONS
      • EXPORT_ALL
      • EXPORT_KEEPALIVE
      • RETAIN_COMPILER_SETTINGS
      • DEFAULT_LIBRARY_FUNCS_TO_INCLUDE
      • INCLUDE_FULL_LIBRARY
      • RELOCATABLE
      • MAIN_MODULE
      • SIDE_MODULE
      • RUNTIME_LINKED_LIBS
      • BUILD_AS_WORKER
      • PROXY_TO_WORKER
      • PROXY_TO_WORKER_FILENAME
      • PROXY_TO_PTHREAD
      • LINKABLE
      • STRICT
      • IGNORE_MISSING_MAIN
      • STRICT_JS
      • WARN_ON_UNDEFINED_SYMBOLS
      • ERROR_ON_UNDEFINED_SYMBOLS
      • SMALL_XHR_CHUNKS
      • HEADLESS
      • DETERMINISTIC
      • MODULARIZE
      • EXPORT_ES6
      • USE_ES6_IMPORT_META
      • EXPORT_NAME
      • DYNAMIC_EXECUTION
      • BOOTSTRAPPING_STRUCT_INFO
      • EMSCRIPTEN_TRACING
      • USE_GLFW
      • WASM
      • STANDALONE_WASM
      • BINARYEN_IGNORE_IMPLICIT_TRAPS
      • BINARYEN_EXTRA_PASSES
      • WASM_ASYNC_COMPILATION
      • DYNCALLS
      • WASM_BIGINT
      • EMIT_PRODUCERS_SECTION
      • EMIT_EMSCRIPTEN_LICENSE
      • LEGALIZE_JS_FFI
      • USE_SDL
      • USE_SDL_GFX
      • USE_SDL_IMAGE
      • USE_SDL_TTF
      • USE_SDL_NET
      • USE_ICU
      • USE_ZLIB
      • USE_BZIP2
      • USE_GIFLIB
      • USE_LIBJPEG
      • USE_LIBPNG
      • USE_REGAL
      • USE_BOOST_HEADERS
      • USE_BULLET
      • USE_VORBIS
      • USE_OGG
      • USE_MPG123
      • USE_FREETYPE
      • USE_SDL_MIXER
      • USE_HARFBUZZ
      • USE_COCOS2D
      • USE_MODPLUG
      • SDL2_IMAGE_FORMATS
      • SDL2_MIXER_FORMATS
      • USE_SQLITE3
      • SHARED_MEMORY
      • WASM_WORKERS
      • AUDIO_WORKLET
      • WEBAUDIO_DEBUG
      • PTHREAD_POOL_SIZE
      • PTHREAD_POOL_SIZE_STRICT
      • PTHREAD_POOL_DELAY_LOAD
      • DEFAULT_PTHREAD_STACK_SIZE
      • PTHREADS_PROFILING
      • ALLOW_BLOCKING_ON_MAIN_THREAD
      • PTHREADS_DEBUG
      • EVAL_CTORS
      • TEXTDECODER
      • EMBIND_STD_STRING_IS_UTF8
      • EMBIND_AOT
      • OFFSCREENCANVAS_SUPPORT
      • OFFSCREENCANVASES_TO_PTHREAD
      • OFFSCREEN_FRAMEBUFFER
      • FETCH_SUPPORT_INDEXEDDB
      • FETCH_DEBUG
      • FETCH
      • WASMFS
      • SINGLE_FILE
      • AUTO_JS_LIBRARIES
      • AUTO_NATIVE_LIBRARIES
      • MIN_FIREFOX_VERSION
      • MIN_SAFARI_VERSION
      • MIN_CHROME_VERSION
      • MIN_NODE_VERSION
      • SUPPORT_ERRNO
      • MINIMAL_RUNTIME
      • MINIMAL_RUNTIME_STREAMING_WASM_COMPILATION
      • MINIMAL_RUNTIME_STREAMING_WASM_INSTANTIATION
      • SUPPORT_LONGJMP
      • DISABLE_DEPRECATED_FIND_EVENT_TARGET_BEHAVIOR
      • HTML5_SUPPORT_DEFERRING_USER_SENSITIVE_REQUESTS
      • MINIFY_HTML
      • MAYBE_WASM2JS
      • ASAN_SHADOW_SIZE
      • USE_OFFSET_CONVERTER
      • LOAD_SOURCE_MAP
      • DEFAULT_TO_CXX
      • PRINTF_LONG_DOUBLE
      • SEPARATE_DWARF_URL
      • ERROR_ON_WASM_CHANGES_AFTER_LINK
      • ABORT_ON_WASM_EXCEPTIONS
      • PURE_WASI
      • IMPORTED_MEMORY
      • SPLIT_MODULE
      • AUTOLOAD_DYLIBS
      • ALLOW_UNIMPLEMENTED_SYSCALLS
      • TRUSTED_TYPES
      • POLYFILL
      • RUNTIME_DEBUG
      • LEGACY_RUNTIME
      • SIGNATURE_CONVERSIONS
  • 优化代码
    • 如何优化代码
    • Emscripten 如何优化
    • 链接时间
    • 高级编译器设置
    • WebAssembly
    • 代码大小
      • 权衡代码大小和性能
      • 其他代码大小技巧
    • LTO
    • EVAL_CTORS
    • 非常大的代码库
      • 单独运行
      • 模块拆分
    • 其他优化问题
      • C++ 异常
      • C++ RTTI
      • 内存增长
      • 查看代码优化过程
      • 分配
    • 不安全的优化
    • 分析
    • 解决性能不佳
  • 优化 WebGL
    • 要针对哪个 GL 模式?
    • 如何分析 WebGL
    • 避免冗余调用
    • 减少 API 调用的技术
    • 避免 GPU-CPU 同步点
    • GPU 驱动器友好的内存访问行为
    • 当 GPU 是瓶颈时
    • 优化加载时间和其他最佳实践
    • 迁移到 WebGL 2
  • 使用消毒剂调试
    • 未定义行为消毒剂
      • 捕获空指针解除引用
      • 最小运行时
    • 地址消毒剂
      • 示例
        • 缓冲区溢出
        • 释放后使用
        • 内存泄漏
        • 返回后使用
      • 配置
        • 禁用 malloc/free 堆栈跟踪
      • 与 SAFE_HEAP 比较
  • 从源代码构建 Emscripten
    • 构建 LLVM
    • 构建 Binaryen
      • Emscripten 工具链要求
        • 您需要什么
        • 测试已安装的工具
      • 手动从源代码构建时配置 Emscripten 设置
        • 创建编译器配置文件
        • 查找编译器配置文件 (.emscripten)
        • 编译器配置文件格式
        • 编辑编译器配置文件
      • 验证 Emscripten 开发环境
        • 测试环境
        • 疑难解答
  • 为 Emscripten 做贡献
    • 贡献
      • 入门
      • 下一步
    • 开发者指南
      • 设置
      • 感兴趣的仓库和分支
      • 提交补丁
      • 代码审查
      • 编译器概述
      • Emscripten 测试套件
      • 二分搜索
      • 使用 C 结构体和定义
      • 另请参阅
    • 作者
  • 分析工具链
    • 快速示例
    • 详细信息
      • 分析工具命令
    • 检测 Python 脚本
      • Python 分析块
  • 关于本网站
    • 搜索网站
    • 报告错误
    • 为网站做贡献
    • 构建网站
      • 安装 Sphinx
      • 网站构建
      • SDK 构建
      • 构建版本
    • 撰写和更新文章
      • 风格指南
      • 如何链接到文档或标题
      • 推荐的节/标题标记
      • 在 markdown 中工作
    • Read the docs 主题
    • 网站许可
索引
 
Logo
Fork me on GitHub
  • Docs文档
  • SDK下载
  • Help社区
  • GitHub
首页
» 移植

移植¶

本节中的主题涵盖了将 C/C++ 代码移植到 Emscripten 时需要考虑的主要集成点,以及一般的编码和调试指南。

  • 代码可移植性和限制
  • Emscripten 运行时环境
  • 连接 C++ 和 JavaScript
  • 文件和文件系统
  • 多媒体和图形
  • 音频
  • 调试
  • Pthreads 支持
  • 网络
  • 使用 SIMD 与 WebAssembly
  • GCC/Clang SIMD 向量扩展
  • WebAssembly SIMD 内在函数
  • 限制和行为差异
  • 优化注意事项
  • 编译针对 x86 SSE* 指令集的 SIMD 代码
  • 编译针对 ARM NEON 指令集的 SIMD 代码
  • C++ 异常支持
  • C setjmp-longjmp 支持
  • 异步代码
  • 构建项目
下一步 上一步
报告错误报告错误 许可许可 贡献贡献 邮件列表邮件列表 WikiWiki 发行说明发行说明 博客博客 帮助联系
  • 关于网站
  • 页面错误

© Copyright 2015, Emscripten Contributors.