Windows下安装 Emscripten 详细过程

背景

最近研究AV1编码标准的aom编码器,编译的过程中发现需要依赖EMSDK,看解释EMSDK就是Emscripten 的相应SDK,所以此博客记录下EMSDK的安装过程;因为之前完全没接触过Emscripten 。
在这里插入图片描述

Emscripten

Emscripten 是一个用于将 C 和 C++ 代码编译成 WebAssembly (Wasm) 和 asm.js 的工具链。它基于 LLVM 编译器基础设施构建,允许开发者在网页中以接近原生的速度运行 C 和 C++ 程序,而无需任何插件。

以下是关于 Emscripten 的一些关键点:

  • 编译目标:Emscripten 可以将 C/C++ 代码编译为 WebAssembly 字节码,这是一种高效的、在 Web 浏览器中运行的低级虚拟机代码。

  • 安装与配置:安装 Emscripten 需要先安装一些前置条件,如 Git、CMake、系统编译工具和 Python。然后通过 emsdk(Emscripten SDK)来安装和管理 Emscripten。

  • 编译过程:Emscripten 使用 emcc(Emscripten Compiler Frontend)作为命令行工具来编译代码。它支持多种编译优化选项,如 -O1 和 -O2,用于生成不同程度的优化代码。

  • 文件系统模拟:由于浏览器的沙盒环境限制,Emscripten 模拟了一个文件系统,允许 C/C++ 代码中使用标准的文件操作 API。

  • HTML 生成:Emscripten 不仅可以生成 JavaScript 文件,还可以生成 HTML 文件,使得编译后的代码能够直接在浏览器中运行。

  • 测试集:Emscripten 提供了丰富的测试用例,覆盖了其大部分功能,对开发者来说是很好的学习资源。

  • 用途:Emscripten 特别适用于希望在 Web 浏览器中运行 3D 游戏和其他高性能应用的场景。

  • 入门教程:对于初学者,有一系列教程可以帮助快速入门 Emscripten,包括如何编译简单的 “Hello, World” 程序,以及如何使用 Emscripten 的各种特性和优化。

Emscripten 的使用对于希望将 C/C++ 应用带入 Web 平台的开发者来说是一个强大的工具,它通过 WebAssembly 使得在浏览器中运行接近原生性能的应用程序成为可能。

  1. 官网:https://emscripten.org/
    在这里插入图片描述

Emscripten 的安装过程

  1. 源码下载:git clone https://github.com/emscripten-core/emsdk
  2. cd到源码目录:cd emsdk
D:\_codec\emsdk [main ≡]> ls


    目录: D:\_codec\emsdk


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----         2024/5/12      9:21                .circleci
d-----         2024/5/12      9:21                .github
d-----         2024/5/12      9:21                bazel
d-----         2024/5/12      9:21                docker
d-----         2024/5/12      9:25                downloads
d-----         2024/5/12      9:24                java
d-----         2024/5/12      9:24                node
d-----         2024/5/12      9:24                python
d-----         2024/5/12      9:21                scripts
d-----         2024/5/12      9:21                test
d-----         2024/5/12      9:25                upstream
-a----         2024/5/12      9:21            453 .dockerignore
-a----         2024/5/12      9:25            398 .emscripten
-a----         2024/5/12      9:21            513 .flake8
-a----         2024/5/12      9:21            510 .gitignore
-a----         2024/5/12      9:21             26 emcmdprompt.bat
-a----         2024/5/12      9:21          13068 emscripten-releases-tags.json
-a----         2024/5/12      9:21           1688 emsdk
-a----         2024/5/12      9:21           1564 emsdk.bat
-a----         2024/5/12      9:21           1436 emsdk.ps1
-a----         2024/5/12      9:21         120426 emsdk.py
-a----         2024/5/12      9:21             34 emsdk_env.bat
-a----         2024/5/12      9:21            596 emsdk_env.csh
-a----         2024/5/12      9:21            316 emsdk_env.fish
-a----         2024/5/12      9:21            100 emsdk_env.ps1
-a----         2024/5/12      9:21           2050 emsdk_env.sh
-a----         2024/5/12      9:21          25072 emsdk_manifest.json
-a----         2024/5/12      9:21            744 legacy-binaryen-tags.txt
-a----         2024/5/12      9:21           1348 legacy-emscripten-tags.txt
-a----         2024/5/12      9:21           1353 LICENSE
-a----         2024/5/12      9:21           2455 llvm-tags-64bit.txt
-a----         2024/5/12      9:21          11733 README.md
-a----         2024/5/12      9:21            734 SECURITY.md
  1. 顺序输入如下命令,进行激活、设置到环境变量中。
.\emsdk update #更新
git pull
.\emsdk install --global latest # 安装
.\emsdk activate latest # 激活
.\emsdk_env.bat # 设置到环境变量中

  1. 验证,终端输入如下命令:emcc -v,出现如下信息,表示安装成功
D:\_codec\emsdk [main ≡]> emcc -v
emcc (Emscripten gcc/clang-like replacement + linker emulating GNU ld) 3.1.59 (0e4c5994eb5b8defd38367a416d0703fd506ad81)
clang version 19.0.0git (https:/github.com/llvm/llvm-project df762a1643bb5b0b3c907611d118c82d4b68a39d)
Target: wasm32-unknown-emscripten
Thread model: posix
InstalledDir: D:\_codec\emsdk\upstream\bin

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/618702.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

论文盲审吐槽多,谁给盲审不负责的老师买单?如何看待浙江大学「一刀切」的研究生学位论文双盲评审制度?

::: block-1 “时问桫椤”是一个致力于为本科生到研究生教育阶段提供帮助的不太正式的公众号。我们旨在在大家感到困惑、痛苦或面临困难时伸出援手。通过总结广大研究生的经验,帮助大家尽早适应研究生生活,尽快了解科研的本质。祝一切顺利!—…

Windows11“重置此电脑”后,Edge浏览器在微软应用商店显示“已安装”,但是开始菜单搜索不到的解决办法

Windows11“重置此电脑”后,Edge浏览器在微软应用商店显示“已安装”,但是开始菜单搜索不到的解决办法 为什么重新使用Edge?问题描述不该更新可用更新问过AI(通义千问),并且AI提供方法全都无效。现象 操作步…

<MySQL> 数据库基础

目录 一、数据库概念 (一)什么是数据库 (二)数据库存储介质 (三)常见数据库 二、数据库基本操作 (一)连接数据库 (二)使用数据库 (三&…

免费PDF批量加密工具

最近在找PDF批量加密的软件来着,发现很多都是需要收费的,当然如果平时工作需要用的比较多,支持一下还是ok的,但是多数人还是偶尔用一下所以没有必要买。 工作用的话,一般企业文件、个人隐私资料、重要合同...所有重要文…

测试萌新三天速通python基础(二)列表,字符串,元组,字典,遍历,容器,集合,函数

python基础 字符串下标(索引)切片字符串的替换 replace()字符串拆分 split()字符串的连接 join列表 list列表的增删改查列表的反转 reverse()排序列表嵌套元组 tuple 排序 升序降序交换变量字典 dict查询遍历容器集合函数参数函数的嵌套调⽤函数的返回值模块导⼊的⽅法____name…

YOLOv8独家原创改进: AKConv(可改变核卷积)

1.AKConv原理介绍 地址:2311.11587 (arxiv.org) 摘要:基于卷积运算的神经网络在深度学习领域取得了令人瞩目的成果,但标准卷积运算存在两个固有的缺陷。一方面,卷积运算仅限于局部窗口,无法捕获其他位置的信息, 并且它的采样形状是固定的。 另一方面,卷积核的大小固定为…

中国速度!滑湿人自己的MFC第一课!

前言: 这!是一个!新的专栏! 因为!面向对象的程序设计!已经!学的差不多了! 我谭哥那本大厚书!也快!学完了! 于是!sgq!为…

springboot+layuimini实现树形表格

树形表格实现增删改查 这里写目录标题 效果图前端页面代码前端插件后端代码controllerserviceserviceImpl 实现类Entitymapperxml mybatis代码数据表 效果图 前端页面代码 <!DOCTYPE html> <html lang"en" xmlns:th"http://www.thymeleaf.org"&g…

【机器学习300问】87、学习率这种超参数在优化时选择随机搜索方法,为什么要在对数尺度范围进行随机搜索?

在超参数优化过程中&#xff0c;对数尺度范围进行随机采样对于某些类型的超参数来说是非常有效的&#xff0c;特别是当超参数的有效值跨越几个数量级时。学习率就是这样一种超参数&#xff0c;它可以从非常小&#xff08;例如&#xff09;到相对大的值&#xff08;例如&#xf…

Vscode----远程服务器改名

问题描述 一开始Autodl服务器机子很多,但是我使用vscode的时候他们的名字都一样,导致每次要打开机子是都需要重新输入ssh和密码 解决方法 修改vscode端服务器的名字即可解决 打开远程设置,选择你的ssh配置文件 将Host改为你想要的名字,保存刷新即可 点击访问博客查看更多…

机器学习作业4——朴素贝叶斯分类器

目录 一、理论 一个例子&#xff1a; 二、代码 对于代码的解释&#xff1a; 1.fit函数&#xff1a; 2.predict函数: 三、实验结果 原因分析&#xff1a; 一、理论 朴素贝叶斯分类器基于贝叶斯定理进行分类&#xff0c;通过后验概率来判断将新数据归为哪一类。通过利用贝…

“知识世界”项目的自动化测试

目录 1.项目介绍 1.1 项目功能介绍 2. 项目测试 2.1 需求分析 2.2 测试计划 2.3 设计测试用例 &#xff08;1&#xff09; 设计 登录 的测试用例 &#xff08;2&#xff09;设计 文章列表页 的测试用例 &#xff08;3&#xff09;设计 详情页 的测试用例 &#xff08…

线下研讨会 技术沙龙|乐鑫芯片与 ESP RainMaker® 为科技初创企业赋能

众多科技初创企业在智能硬件市场迅猛发展的背景下&#xff0c;对不断变化的需求展现出了高度的敏锐性&#xff0c;期望能够快速将其转化为切实的产品方案。然而&#xff0c;面对复杂繁重的软硬件集成任务&#xff0c;这些企业往往容易陷入研发瓶颈、资金短缺以及效率低下等多重…

BGP综合大实验

实验要求 1.AS1中存在两个环回&#xff0c;一个地址是192.168.1.0/24&#xff0c;改地址不能在任何协议中宣告&#xff1b;AS3中存在两个环回&#xff0c;一个地址为192.168.2.0/24&#xff0c;该地址不能在任何协议中宣告&#xff0c;最终要求这两个环回可以ping通&#xff1b…

【超详细】跑通YOLOv8之深度学习环境配置1

环境配置1下载安装内容如下&#xff1a; Anaconda&#xff1a;https://www.anaconda.com/download/success VScode&#xff1a;https://code.visualstudio.com/Download Pycharm&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows Visual Studio2019&a…

Linunx应急响应

Linux应急流程 1,请提交攻击者的 IP 地址2,请提交攻击者使⽤的操作系统3,请提交攻击者进⼊⽹站后台的密码4,请提交攻击者⾸次攻击成功的时间&#xff0c;格式&#xff1a;DD/MM/YY:hh:mm:ss5,请提交攻击者上传的恶意⽂件名&#xff08;含路径&#xff09;6,请提交攻击者写⼊的恶…

Python vs MATLAB:选择深度学习的首选编程语言

Python vs MATLAB&#xff1a;选择深度学习的首选编程语言 在深度学习领域&#xff0c;编程语言的选择对于初学者的学习路径和未来的职业发展至关重要。目前&#xff0c;Python和MATLAB都是进行科学计算和数据分析的流行工具&#xff0c;但它们在深度学习社区中的应用和受欢迎…

天机学堂—学习辅助功能(含场景问答和作业)

我的课表 需求分析 原型图 管理后台 用户端 流程图 数据设计 接口设计 支付成功报名课程后, 加入到我的课表(MQ)分页查询我的课表查询我正在学习的课程根据id查询指定课程的学习状态删除课表中的某课程 代码实现 数据表设计 添加课程到课表&#xff08;非标准接口&#x…

猫头虎分享已解决Bug || **Babel转换器下载问题** Failed to resolve babel-loader dependency`

猫头虎分享已解决Bug &#x1f42f; || Babel转换器下载问题 &#x1f6ab;Failed to resolve babel-loader dependency 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a…

网络 | 应用层-websocket协议报文格式解析

websocket的官方文档为rfc(request for comments)&#xff0c;是网络协议的规范文档。它包含了许多计算机世界的核心知识 除了这里的websocket&#xff0c;它里边还包含我们熟知的http,tcp等协议的解析。 websocket协议对应的编号是rfc 6455 websocket协议格式解析 由图可知&a…