当前位置: 首页 > news >正文

编译运行 webAssembly(wasm)

环境准备:

lunix下docker

参考https://hub.docker.com/r/emscripten/emsdk

拉编译环境

docker pull emscripten/emsdk 

编译

随便找个目录,敲下面命令,编译一个webAssembly 程序

# create helloworld.cpp
cat << EOF > helloworld.cpp
#include <iostream>
int main() {std::cout << "Hello World!" << std::endl;return 0;
}
EOF# compile with docker image
docker run \--rm \-v $(pwd):/src \trzeci/emscripten \emcc helloworld.cpp -o helloworld.js

 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS和C互相操作</title>
</head>
<body><script>Module = {};Module.onRuntimeInitialized = function (){console.log(Module._show_me_your_name());console.log(Module._add(1,2)) }</script><script src="./helloworld.js"></script>
</body>
</html>

上述的html文件对应下面这个cpp

EM_PORT_API(int) show_me_your_name() {return 789;
}EM_PORT_API(float) add(float a,float b){return a + b;
}

同样的编译方式,试一下

上述是最简单的demo,js环境跟wasm的交互,只有number是直通的,如果是字符串需要做其他的转化处理,以后再说

其他:

docker pull镜像的时候可能会出错,docker配置代理的方式

进 /etc/docker/daemon.json配置

{"registry-mirrors": ["https://registry.hub.docker.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://registry.docker-cn.com"],"proxies": {"http-proxy": "http://xxx:8118","https-proxy": "http://xxx:8118","no-proxy": "localhost"}
}

重启服务

systemctl daemon-reload
systemctl restart docker

xxx这些自行根据实际情况替换

参考:

https://www.wenjiangs.com/doc/afky6syw

墨滴社区

Download and install — Emscripten 3.1.66-git (dev) documentation

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • C / C++的内存管理
  • 小程序与APP的区别
  • IDEA2023.1添加java虚拟机启动参数,打开断言
  • 与姜妍同款冰箱,容声516WILL养鲜冰箱领“鲜”上市
  • Oracle查询(下)
  • MySQL | 知识 | 从底层看清 InnoDB 数据结构
  • ChromaDB教程_2024最新版(下)
  • jspdf踩坑 htmltocanvas
  • VScode的右下角的“Parsing open files“是什么意思
  • (2)leetcode 234.回文链表 141.环形链表
  • 微信支付开发-后台统计工厂实现
  • 站群服务器是指什么?企业为什么选择站群服务器?
  • 华为HarmonyOS地图服务 11 - 如何在地图上增加点注释?
  • 页面关键路径渲染详解
  • uniapp vue3 梯形选项卡组件
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【402天】跃迁之路——程序员高效学习方法论探索系列(实验阶段159-2018.03.14)...
  • create-react-app做的留言板
  • ES2017异步函数现已正式可用
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • 简单基于spring的redis配置(单机和集群模式)
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 跨域
  • 前端学习笔记之观察者模式
  • 前端之Sass/Scss实战笔记
  • 十年未变!安全,谁之责?(下)
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 新版博客前端前瞻
  • Nginx实现动静分离
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • $(selector).each()和$.each()的区别
  • (16)UiBot:智能化软件机器人(以头歌抓取课程数据为例)
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (二) 初入MySQL 【数据库管理】
  • (二)【Jmeter】专栏实战项目靶场drupal部署
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (一)、软硬件全开源智能手表,与手机互联,标配多表盘,功能丰富(ZSWatch-Zephyr)
  • (一)WLAN定义和基本架构转
  • (转)为C# Windows服务添加安装程序
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .dwp和.webpart的区别
  • .gitignore文件—git忽略文件
  • .htaccess 强制https 单独排除某个目录
  • .NET delegate 委托 、 Event 事件,接口回调
  • .NET Micro Framework初体验
  • .net 后台导出excel ,word
  • .net与java建立WebService再互相调用
  • /run/containerd/containerd.sock connect: connection refused
  • /usr/bin/env: node: No such file or directory
  • @EnableAsync和@Async开始异步任务支持
  • @RequestBody详解:用于获取请求体中的Json格式参数