Logo
  • 介绍 Emscripten
    • 关于 Emscripten
      • Emscripten 工具链
      • 移植代码以使用 Emscripten
    • 社区
      • 联系我们
      • 报告错误
      • 贡献
    • 开源许可证
    • 发布说明
    • 演讲和出版物
      • 演示
      • 论文
      • 书籍
  • 入门
    • 下载和安装
      • 使用 emsdk 的安装说明(推荐)
        • Emsdk 安装目标
        • 平台特定说明
      • 验证安装
      • 更新 SDK
      • 卸载 Emscripten SDK
      • 使用 Docker 镜像
      • 使用非官方软件包进行安装
    • Emscripten 教程
      • 首先要做的
      • 验证 Emscripten
      • 运行 Emscripten
      • 生成 HTML
      • 使用文件
      • 优化代码
      • Emscripten 测试套件和基准测试
      • 一般技巧和下一步
    • Emscripten 测试套件
      • 设置
      • 运行测试
      • 跳过测试
      • 在第一次失败时退出
      • 运行一堆随机测试
      • 重要测试
      • 基准测试
      • 调试测试失败
    • 错误报告
      • LLVM、wasm-ld、clang、Binaryen 错误
      • 站点和文档错误
    • 常见问题解答
      • 如何编译代码?
      • 为什么我在构建基本代码和测试时会遇到错误?
      • 我尝试了一些东西:为什么它不起作用?
      • 我是否需要更改我的构建系统才能使用 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 移植
        • 添加更多移植
        • 外部移植
      • 构建系统问题
        • 构建系统自我执行
        • 模拟动态链接
        • 配置可能会运行看起来失败的检查
        • 存档 (.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 绑定器和 Embind
        • 绑定 C/C++ 和 JavaScript - Node-API
      • Embind
        • 一个简单的例子
        • 绑定库
        • 类
        • 内存管理
        • 值类型
        • 高级类概念
        • 重载函数
        • 枚举
        • 常量
        • 类属性
        • 内存视图
        • 使用 val 将 JavaScript 转录到 C++
        • 内置类型转换
        • TypeScript 定义
        • 性能
      • WebIDL 绑定器
        • 一个简单的例子
        • 模块化输出
        • 在 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 扩展
        • 测试代码/示例
        • 错误报告
    • 音频
      • 支持的 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
    • 在 WebAssembly 中使用 SIMD
    • 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 移植
        • 添加更多移植
        • 外部移植
      • 构建系统问题
        • 构建系统自我执行
        • 模拟动态链接
        • 配置可能会运行看起来失败的检查
        • 存档 (.a) 文件
      • 手动使用 emcc
      • 在预处理器中检测 Emscripten
      • 使用编译器包装器
      • pkg-config
      • 示例 / 测试代码
      • 故障排除
  • API 参考
    • emscripten.h
      • 内联汇编/JavaScript
        • 定义
      • 从 C/C++ 调用 JavaScript
        • 回调的函数指针类型
        • 函数
      • 浏览器执行环境
        • 函数
      • 异步文件系统 API
        • 类型定义
        • 函数
      • 异步 IndexedDB API
      • 编译
      • Worker API
        • 类型定义
        • 函数
      • 日志记录工具
        • 定义
        • 函数
      • 套接字事件注册
        • 回调函数
        • 函数
      • 未对齐类型
        • 类型定义
      • 伪同步函数
        • 休眠
        • 网络
        • IndexedDB
      • Asyncify 函数
        • 类型定义
        • 函数
      • ABI 函数
    • html5.h
      • 如何使用此 API
        • 注册函数
        • 回调函数
        • 受 Web 安全影响的函数
        • 测试/示例代码
      • 通用类型
      • 函数结果值
      • 键
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 鼠标
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 滚轮
        • 定义
        • 结构体
        • 回调函数
        • 函数
      • 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 Workers API
      • 快速示例
      • 简介
      • Pthreads vs Wasm Workers: 使用哪一个?
        • Pthreads 可以代理 JS 函数
        • Pthreads 具有取消点
        • Pthreads 可能会同步启动 - Wasm Workers 总是异步启动
        • Pthread 拓扑结构是扁平的 - Wasm Workers 是分层的
        • Pthreads 可以使用 Wasm Worker 同步 API,反之则不行
        • Pthreads 具有“线程主”函数和 atexit 处理程序
        • Pthreads 具有每个线程的传入代理消息队列,Wasm Workers 没有
        • Pthreads 同步挂钟时间
        • 输入事件 API 只反向代理到 pthreads
        • Pthread vs 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 的最新更改?
        • 如何使用我自己的 Emscripten 分支与 SDK?
    • Emscripten 编译器前端 (emcc)
      • 命令行语法
        • 参数
      • 环境变量
    • Emscripten Windows 命令提示符 (emcmdprompt.bat)
      • 命令行语法
    • Emscripten 编译器设置
      • 断言
      • STACK_OVERFLOW_CHECK
      • CHECK_NULL_WRITES
      • VERBOSE
      • INVOKE_RUN
      • EXIT_RUNTIME
      • STACK_SIZE
      • MALLOC
      • ABORTING_MALLOC
      • INITIAL_HEAP
      • INITIAL_MEMORY
      • MAXIMUM_MEMORY
      • ALLOW_MEMORY_GROWTH
      • MEMORY_GROWTH_GEOMETRIC_STEP
      • MEMORY_GROWTH_GEOMETRIC_CAP
      • MEMORY_GROWTH_LINEAR_STEP
      • MEMORY64
      • INITIAL_TABLE
      • ALLOW_TABLE_GROWTH
      • GLOBAL_BASE
      • TABLE_BASE
      • USE_CLOSURE_COMPILER
      • CLOSURE_WARNINGS
      • IGNORE_CLOSURE_COMPILER_ERRORS
      • DECLARE_ASM_MODULE_EXPORTS
      • INLINING_LIMIT
      • SUPPORT_BIG_ENDIAN
      • SAFE_HEAP
      • SAFE_HEAP_LOG
      • EMULATE_FUNCTION_POINTER_CASTS
      • EXCEPTION_DEBUG
      • DEMANGLE_SUPPORT
      • LIBRARY_DEBUG
      • SYSCALL_DEBUG
      • SOCKET_DEBUG
      • DYLINK_DEBUG
      • FS_DEBUG
      • SOCKET_WEBRTC
      • WEBSOCKET_URL
      • PROXY_POSIX_SOCKETS
      • WEBSOCKET_SUBPROTOCOL
      • OPENAL_DEBUG
      • WEBSOCKET_DEBUG
      • GL_ASSERTIONS
      • TRACE_WEBGL_CALLS
      • GL_DEBUG
      • GL_TESTING
      • GL_MAX_TEMP_BUFFER_SIZE
      • GL_UNSAFE_OPTS
      • FULL_ES2
      • GL_EMULATE_GLES_VERSION_STRING_FORMAT
      • GL_EXTENSIONS_IN_PREFIXED_FORMAT
      • GL_SUPPORT_AUTOMATIC_ENABLE_EXTENSIONS
      • GL_SUPPORT_SIMPLE_ENABLE_EXTENSIONS
      • GL_TRACK_ERRORS
      • GL_SUPPORT_EXPLICIT_SWAP_CONTROL
      • GL_POOL_TEMP_BUFFERS
      • GL_EXPLICIT_UNIFORM_LOCATION
      • GL_EXPLICIT_UNIFORM_BINDING
      • USE_WEBGL2
      • MIN_WEBGL_VERSION
      • MAX_WEBGL_VERSION
      • WEBGL2_BACKWARDS_COMPATIBILITY_EMULATION
      • FULL_ES3
      • LEGACY_GL_EMULATION
      • GL_FFP_ONLY
      • GL_PREINITIALIZED_CONTEXT
      • USE_WEBGPU
      • STB_IMAGE
      • GL_DISABLE_HALF_FLOAT_EXTENSION_IF_BROKEN
      • GL_WORKAROUND_SAFARI_GETCONTEXT_BUG
      • GL_ENABLE_GET_PROC_ADDRESS
      • JS_MATH
      • POLYFILL_OLD_MATH_FUNCTIONS
      • LEGACY_VM_SUPPORT
      • ENVIRONMENT
      • LZ4
      • DISABLE_EXCEPTION_CATCHING
      • EXCEPTION_CATCHING_ALLOWED
      • DISABLE_EXCEPTION_THROWING
      • EXPORT_EXCEPTION_HANDLING_HELPERS
      • EXCEPTION_STACK_TRACES
      • 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
  • 使用 Sanitizers 进行调试
    • 未定义行为 Sanitizer
      • 捕获空指针引用
      • 最小运行时
    • 地址 Sanitizer
      • 示例
        • 缓冲区溢出
        • 释放后使用
        • 内存泄漏
        • 返回后使用
      • 配置
        • 禁用 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
  • 文档文档
  • SDK下载
  • 帮助社区
  • GitHub
主页
» 网站链接

网站链接¶

本节包含特定于网站的文章,或不属于任何其他类别。

  • 关于本网站
  • 词汇表
报告错误报告错误 许可证许可证 贡献贡献 邮件列表邮件列表 维基维基 发行说明发行说明 博客博客 帮助联系
  • 关于网站
  • 页面错误

© 版权所有 2015,Emscripten 贡献者.