Mac 上安装 Emscripten

背景:Web 端需要使用已有的 C++ 库,需要将 C++ 项目编译成 WebAssembly(.wasm) 供 js 调用。

Emscripten 可以将 C++ 编译成 .wasm

一、下载源码

# 下载 emsdk 源码
git clone https://github.com/emscripten-core/emsdk.git

# 下载完成后进入到 emsdk 项目根目录
cd emsdk

二、安装并激活 emsdk 工具

2.1 安装最新版本的 emsdk

# 拉取最新版本的 emsdk (如果是第一次拉取安装就不需要)
git pull

# 下载安装最新版本的 emsdk 工具
./emsdk install latest

# 激活最新版本的 emsdk 工具
./emsdk activate latest

# 在当前命令行窗口启用工具和相关环境变量,如果没配置全局的环境变量(下面的文章会讲到),每新开一个窗口都需要执行一次
source ./emsdk_env.sh

2.2 安装指定版本的 emsdk

# 下载安装最新版本的 emsdk 工具
./emsdk install 3.1.47

# 激活最新版本的 emsdk 工具
./emsdk activate 3.1.47

# 在当前命令行窗口启用工具和相关环境变量,如果没配置全局的环境变量(下面的文章会讲到),每新开一个窗口都需要执行一次
source ./emsdk_env.sh

三、配置全局环境变量

如果不配置全局环境变量,每次新开命令行窗口使用 emsdk 工具时,都需要执行一次 source ./emsdk_env.sh 。配置环境变量后在任何窗口都可以使用,比较方便。

打开环境变量配置文件

vim ~/.zshrc

在后面加入如下信息,即 emsdk 和 emscripten 的安装目录加到 path 中。

export EMSDK_PATH="/Users/AlanWang4523/installs/emsdk"
export EMSCRIPTEN_PATH="/Users/AlanWang4523/installs/emsdk/upstream/emscripten"
export PATH=$PATH:${EMSDK_PATH}
export PATH=$PATH:${EMSCRIPTEN_PATH}

四、测试

4.1 测试工具是否安装好

emcc -v

输出如下则说明 Emscripten 已安装成功
在这里插入图片描述

4.2 测试 C++ Demo 编译

写个小 Demo,代码如下,将其保存为 demo.cpp

#include <iostream>
#include <emscripten/emscripten.h>

int main(int argc, const char * argv[]) {
    std::cout << "Hello AlanWang4523\n";
    return 0;
}

进入 demo.cpp 文件所在的目录,将上面的 C++ demo,编译成 wasm 并插入 html 中:

emcc demo.cpp -o index.html

编译完成会生成:index.wasm、index.js、index.html 三个文件,如下:
在这里插入图片描述

4.3 测试 C++ Demo 在浏览器运行

直接双击刚才编译生成的 index.html 运行会报错,因为浏览器不允许从本地加载 wasm 执行。需要起个 httpServer 来执行。

执行双击 index.html 运行报错如下:
在这里插入图片描述
打开命令行工具,进入 index.html 所在目录,然后执行以下命令开启服务:

# python -m http.server <端口号>
python -m http.server 9090

在这里插入图片描述
服务启动起来后,在浏览器输入以下地址来访问刚才的 index.html

http://localhost:9090/
或:
http://0.0.0.0:9090/

运行结果如下:
在这里插入图片描述
至此,Emscripten 已安装测试完成。

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

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

相关文章

2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models

2021-arxiv-LoRA Low-Rank Adaptation of Large Language Models Paper: https://arxiv.org/abs/2106.09685 Code: https://github.com/microsoft/LoRA 大型语言模型的LoRA低秩自适应 自然语言处理的一个重要范式包括对通用领域数据的大规模预训练和对特定任务或领域的适应。…

不容错过的2023年度线框图工具Top 8

线框图工具可以快速呈现设计师的灵感。在任何项目的开始阶段&#xff0c;选择一个方便的线框图工具都是最好的选择。如今&#xff0c;线框图工具的出现并不夸张。各种工具都很容易获得&#xff0c;但选择太多确实很容易给设计师的选择带来困难。 买东西都讲性价比&#xff0c;…

电商课堂|5分钟了解电商数据分析完整流程,建议收藏!

账户效果下降&#xff0c;如何能够快速找到问题并优化调整&#xff1f; 相信百分之90%的竞价员都会说&#xff1a;“做数据分析。” 没错&#xff0c;数据分析能够帮助我们快速锁定问题所在&#xff0c;确定优化方向&#xff0c;还可以帮助我们找到流量控制的方向。那么做电商&…

[RISC-V]verilog

小明教IC-1天学会verilog(7)_哔哩哔哩_bilibili task不可综合&#xff0c;function可以综合

206.反转链表

206.反转链表 力扣题目链接(opens new window) 题意&#xff1a;反转一个单链表。 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 双双指针法&#xff1a; 创建三个节点 pre(反转时的第一个节点)、cur(当前指向需要反转的节点…

CodeWhisperer 初体验-手把手教导 给你飞一般的体验!

文章作者&#xff1a;燛衣 CodeWhisperer 有以下几个主要用途&#xff1a; 解决编程问题&#xff1a;CodeWhisperer 可以帮助您解决遇到的编程问题。您可以描述您的问题或需求&#xff0c;CodeWhisperer 将尽力提供相关的解决方案、代码示例或建议。无论您是遇到了语法错误、逻…

2023年十大地推网推拉新接单平台,都是一手单和官方渠道

2023年做拉新推广的地推人员&#xff0c;一定不要错过这十个接单平台&#xff0c;助你轻松找到一手单&#xff0c;这10个平台分别是&#xff1a; &#xff08;主推&#xff1a;聚量推客&#xff09; 我们也拿到了一手邀请码&#xff1a;000000 1&#xff1a;聚量推客 “聚量推…

【LeetCode】每日一题 2023_11_1 参加会议的最多员工数(没做出来)

文章目录 刷题前唠嗑题目&#xff1a;参加会议的最多员工数题目描述代码与解题思路纳入收藏夹 结语 刷题前唠嗑 好好好&#xff0c;这么玩是吧&#xff0c;11 月刚准备开始刷每日一题&#xff0c;就给我来了一道 hard&#xff0c;我连题目都看不懂他在讲些什么&#xff0c;但是…

YApi接口管理平台远程代码执行漏洞复现

一、简介 YAPI是由去哪儿网移动架构组(简称YMFE&#xff0c;一群由FE、iOS和Android工程师共同组成的最具想象力、创造力和影响力的大前端团队)开发的可视化接口管理工具&#xff0c;是一个可本地部署的、打通前后端及QA的接口管理平台。YAPI旨在为开发、产品和测试人员提供更优…

CVE-2018-8174 IE浏览器远程代码执行漏洞

一、漏洞简介 该漏洞影响最新版本的IE浏览器及使用了IE内核的应用程序。用户在浏览网页或打开Office文档时都可能中招&#xff0c;最终被黑客植入后门木马完全控制电脑。微软在4月20日早上确认此漏洞&#xff0c;并于5月8号发布了官方安全补丁&#xff0c;对该0day漏洞进行了修…

【数智化案例展】江苏兴达——智昌蜂脑平台助力产业数智化腾飞

‍ 智昌集团案例 本项目案例由智昌集团投递并参与数据猿与上海大数据联盟联合推出的《2023中国数智化转型升级创新服务企业》榜单/奖项”评选。 ‍数据智能产业创新服务媒体 ——聚焦数智 改变商业 江苏兴达钢帘线股份有限公司是子午线轮胎用钢帘线的专业生产商&#xff0c;经…

【java学习—十一】注解:Annotation(3)

文章目录 1. 相关概念2. 基本的Annotation3. 自定义Annotation 注意&#xff1a;注解这部分内容&#xff0c;了解即可 1. 相关概念 从 JDK 5.0 开始 , Java 增加了对元数据 (MetaData) 的支持 , 也就是 Annotation( 注释 )Annotation 其实就是代码里的特殊标记 , 这些标记可以…

爱写bug的小邓程序员个人博客

博客网址: http://www.006969.xyz 欢迎来到我的个人博客&#xff0c;这里主要分享我对于前后端相关技术的学习笔记、项目实战经验以及一些技术感悟。 在我的博客中&#xff0c;你将看到以下主要内容&#xff1a; 技术文章 我将会分享我在学习前后端技术过程中的一些感悟&am…

chorme安装esay scholar及chrome 无法从该网站添加应用、扩展程序和用户脚本解决方案

问题描述 如题&#xff0c;博主想安装easy scholar用于查询论文的分区&#xff0c;结果安装了半天一直出现chrome 无法从该网站添加应用、扩展程序和用户脚本解决方案的问题。 解决方案 先从这个网址下载&#xff1a;https://www.easyscholar.cc/download 然后对下载好的文…

Spring源码分析篇一 @Autowired 是怎样完成注入的?究竟是byType还是byName亦两者皆有

1. 五种不同场景下 Autowired 的使用 第一种情况 上下文中只有一个同类型的bean 配置类 package org.example.bean;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration;Configuration public class FruitCo…

tbh Cutter切割节点

在tbh过程中&#xff0c;如果想把一个元素置为一个位图图片某个图像的后边&#xff0c;如何做呢&#xff1f; 如&#xff1a;把圆形放到花的后边&#xff1a; 最后实现效果&#xff1a;&#xff08;请忽略边缘的细节&#xff0c;这里只是记录用法&#xff09; 第一步&#xf…

2023大湾区粤港澳金融数学建模思路代码分享

首先非常建议大家仔细的阅读这个题的题目介绍&#xff0c;还有附赠的就是那个附件里的那几篇材料&#xff0c;我觉得你把这些内容读透理解了&#xff0c;就可以完成至少第一、第二、第三问&#xff0c;嗯&#xff0c;好。然后对于题目里它主要第一部分给出了常用的估值模型&…

MySQL安装『适用于 CentOS 7』

✨个人主页&#xff1a; 北 海 &#x1f389;所属专栏&#xff1a; MySQL 学习 &#x1f383;操作环境&#xff1a; CentOS 7.6 腾讯云远程服务器 &#x1f381;软件版本&#xff1a; MySQL 5.7.44 文章目录 1.MySQL 的清理与安装1.1查看是否存在 MySQL 服务1.2.卸载原有服务1.…

[论文精读]How Powerful are Graph Neural Networks?

论文原文&#xff1a;[1810.00826] How Powerful are Graph Neural Networks? (arxiv.org) 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#x…

docker--基本操作

第 1 章 Docker基础 1.1 docker简介 在这一部分我们主要讲两个方面&#xff1a; docker是什么、docker特点 1.1.1 docker是什么 docker是什么&#xff1f; docker的中文解释是码头工人。 官方解释&#xff1a; Docker是一个开源的容器引擎&#xff0c;它基于LCX容器技术&…