简单的WebAssembly应用搭建
1 WebAssembly简介
WebAssembly是一种新兴的Web技术,网上的资料并不是很多,简单的可以理解为让C/C++程序运行在浏览器上,官网上用四个词来描述该技术:高效、安全、开放、标准。
1.1 高效
C/C++代码被编译成.wasm的二进制格式文件,其目标是充分发挥硬件能力已达到原生执行效率。
1.2 安全
WebAssembly应用运行在一个沙箱化的环境中,对外只暴露特定的接口,并且在Web环境中,WebAssembly将会严格遵守浏览器的一些安全策略。
1.3 开放
.wasm文件是二进制格式文件,不便于理解,但WebAssembly在将来可以直接通过浏览器查看wasm模块的源码。
1.4 标准
WebAssembly可以被JavaScript调用,同时也可以像WebAPI一样调用浏览器的功能。
2 工具安装
编写WebAssembly应用所需的工具比较多,主要包含有浏览器(新版的chrome、firefox)、C/C++开发环境、Web环境、Emscripten编译器。这里面最麻烦的就是Emscripten编译器的安装,Emscripten是把C/C++程序编译成浏览器运行的wasm文件以及对应的JS代码的编译器,主要有两种安装方式(已windows环境为例):
2.1 在线安装
在线安装比较容易出错,需要安装git并能访问github开源社区,参考官网:http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html,步骤如下:
2.1.1 克隆emsdk仓库
git clone https://github.com/juj/emsdk.git,这一步容易报Timed out错误:
可以参考w3上面的解决方法:http://3ms.huawei.com/hi/group/1503847/thread_5329623.html?mapId=6456777&t_type=ask
2.1.2 安装工具
cd emsdk // 定位到emsdk文件夹
emsdk update // 执行更新
emsdk install latest // 安装各种工具
emsdk activate latest // 生成.emscripten文件,激活配置
2.2 离线安装
离线安装比较简单,在官网http://kripken.github.io/emscripten-site/docs/getting_started/downloads.html下载离线包emsdk-1.35.0-full-64bit.exe,里面集成了所需的各种工具,如clang、node、python、emscripten等,下载完成后直接运行就可以完成上述软件的安装,安装完成后的目录结构如下:
2.2.1 验证安装结果
打开cmd,输入emcc –v,提示如下信息则表示安装成功:
如果提示emcc不是内部或外部命令,去检查一下.emscripten文件,.emscripten文件在当前用户所在的文件夹中(C:\Users\你的用户名),正常安装后的内容为:
3 应用搭建
3.1 编写C/C++程序
代码说明如下:
1、 当对应的js文件被加载时,main方法自动执行,printf翻译成console.log;
2、 EMSCRIPTEN_KEEPALIVE修饰的方法表示是要导出的方法,这些方法才能生成对应的API,供js调用,API名一般为下划线+方法名,即是说_addTest、_subTest。
3.2 编译.c文件为js代码
打开cmd,输入以下指令:emcc index.c –s WASM=1 –O3 –o index.js,参数解释如下:
1、emcc:代表Emscripten编译器;
2、index.c:C代码的文件;
3、-s WASM=1:指定使用WebAssembly;
4、-O3:代码优化级别;
5、-o index.js:生成wasm模块的全部文件,包含.wasm文件和.js文件等。
emcc参数的详细说明可以参考官网介绍:http://kripken.github.io/emscripten-site/docs/tools_reference/emcc.html#emccdoc
编译结果如下:
包含如下文件:
3.3 搭建Web运行环境
3.3.1 目录结果
3.3.2 index.html代码
3.3.3 index.js代码
在emscripten编译的index.js代码基础上增加如下代码:
3.3.4 页面效果
浏览器访问对应的地址,点击等号,能完成_addTest()和_subTest()方法的调用,页面如下:
3.4 总结
上述应用,通过一个简单的例子实现了通过浏览器来执行C/C++代码,WebAssembly API的具体介绍可以参考官网:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WebAssembly。
简单的WebAssembly应用搭建的更多相关文章
- 最简单的SVN环境搭建过程
本文简单描述最简单的SVN环境搭建过程 搭建环境:windows (个人验证了windows2003,windows xp) 使用软件:Setup-Subversion-1.6.17 //Serve ...
- Elasticsearch简单使用和环境搭建
Elasticsearch简单使用和环境搭建 1 Elasticsearch简介 Elasticsearch是一个可用于构建搜索应用的成品软件,它最早由Shay Bannon创建并于2010年2月发布 ...
- SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...
- EpiiAdmin 开源的php交互性管理后台框架, 让复杂的交互变得更简单!Phper快速搭建交互性平台的开发框架,基于Thinkphp5.1+Adminlte3.0+Require.js。
EpiiAdmin EpiiAdmin php开源交互性管理后台框架,基于Thinkphp5.1+Adminlte3.0+Require.js, 让复杂的交互变得更简单!Phper快速搭建交互性平台的 ...
- Python实现一个简单三层神经网络的搭建并测试
python实现一个简单三层神经网络的搭建(有代码) 废话不多说了,直接步入正题,一个完整的神经网络一般由三层构成:输入层,隐藏层(可以有多层)和输出层.本文所构建的神经网络隐藏层只有一层.一个神经网 ...
- 简单谈谈eclipse下搭建PhoneGap环境来开发Android程序 - linux86(转)
原来在逛园子的时候一不小心发现了一个新概念“PhoneGap”简称PG,我一直都喜欢追逐新事物,自然就产生了好奇心.于是乎我就在百度上面Google了一下PhoneGap是什么东西.简单的说就是用另一 ...
- asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用
摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...
- asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦
学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对 ...
- 简单的SSM框架搭建教程
简单的ssm框架的搭建和配置文件 ssm框架里边的配置: 1.src路径下直接存放数据库和log4j的properties文件 2.src路径下建个config包,分别放置ssm的xml文件 3.修改 ...
- 简单的SpringBoot环境搭建
开始搭建前请确认您的计算机中的Maven已正确配置 一:使用IDEA创建一个Maven项目,图中第一个指针请选择自己正在使用的JDK版本,指针二请打勾,选中指针三所指向的类型并点击Next 二:填写G ...
随机推荐
- Typora 最后免费版本也不能用了?简单一招搞定
作者:小牛呼噜噜 | https://xiaoniuhululu.com 计算机内功.JAVA底层.面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」 Typora是一款优秀的 Markdown 编辑 ...
- 游标长时间open导致表无法vacuum问题
一.问题描述 用户在实际中可能会碰到类似以下 dead rows 无法 vacuum的问题,一个可能的原因是由于游标未结束的原因. test=# vacuum(verbose) t1; INFO: v ...
- win10算hash值,md5,sha256等,无需额外下载工具
# windows_cmd certutil -hashfile .\文件名 SHA256 可选哈希算法:md2/md4/md5/sha1/sha256/sha384/sha512
- CMU 15-445 Project 0 实现字典树
原文链接:https://juejin.cn/post/7139572163371073543 项目准备 代码.手册 本文对应 2022 年的课程,Project 0 已经更新为实现字典树了.C++1 ...
- 利用ldt_struct 与 modify_ldt 系统调用实现任意地址读写
利用ldt_struct 与 modify_ldt 系统调用实现任意地址读写 ldt_struct与modify_ldt系统调用的介绍 ldt_struct ldt是局部段描述符表,里面存放的是进程的 ...
- Kubernetes(K8S)是什么?
概述 Kubernetes,又称为 k8s(首字母为 k.首字母与尾字母之间有 8 个字符.尾字母为 s,所以简称 k8s)或者简称为 "kube" ,是一种可自动实施 Linux ...
- K8S容器HeadlessService间动态IP通信
文件网址:https://www.kubebiz.com/KubeBiz/MongoDB?k8sv=v1.20 使用文件网址中提供的yaml文件安装三节点的mongodb集群,其service是hea ...
- PAT (Basic Level) Practice 1024 科学计数法 分数 20
科学计数法是科学家用来表示很大或很小的数字的一种方便的方法,其满足正则表达式 [+-][1-9].[0-9]+E[+-][0-9]+,即数字的整数部分只有 1 位,小数部分至少有 1 位,该数字及其指 ...
- 关于private子网访问s3时报错:Connect timeout on endpoint URL
今天在使用private私有子网,通过aws s3命令访问s3时,报如下错误: [qq_5201351@private ~]$ aws s3 ls Connect timeout on endpoin ...
- Java 求解自幂数(水仙花数)
什么是自幂数 如果在一个固定的进制中,一个 n 位自然数等于自身各个数位上数字的 n 次幂之和,则称此数为自幂数. 例如:在十进制中,153 是一个三位数,各个数位的3次幂之和为 1^3+5^3+3^ ...