一、Emscripten编译优化分为两个步骤

  1. 每个源文件编译成目标文件(.bc文件),通过LLVM优化
  2. 目标文件编译成js文件

二、Js使用库的两种方式

1. 多个bitcode直接变成js

  • ​​​emcc project.bc libstuff.bc -o final.js

2. 多个bitcode先编译成一个,然后在变成js

  • emcc project.bc libstuff.bc -o allproject.bc
  • emcc allproject.bc -o final.js

一、Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)的步骤。

extern.cc文件

extern "C"
{int add(int x, int y) {int a=333;return x + y+ a;}int min(int x, int y) {return x - y;}
}

1.转成wasm命令

emcc extern.cc -o extern.js -s EXPORTED_FUNCTIONS='["_add","_min"]'  -O3 -s wasm=1

注意:这里EXPORTED_FUNCTIONS指的是导出的函数,需要和源文件里的函数名是相对应的,-O3是编译优化等级,只有这个等级生成的wasm文件才会很小(几十字节),不加该优化选项,生成的wasm将会有几十KB。生成的时候会临时产生*.asm.js,等生成完后,会自动删掉。

执行完将会生成 extern.js和extern.wasm两个文件。

2.转成wast可读文件

wasm2wat extern.wasm -o extern.wast

3.转成llvm字节码 bc格式(中间格式)

(开源编译器框架llvm字节介绍:http://www.nagain.com/activity/article/4/)

 emcc extern.cc -o extern.bc -s EXPORTED_FUNCTIONS='["_add","_min"]'  -O3

4.使用llvm-dis把llvm字节码转成可读格式

 llvm-dis extern.bc

二、执行方式

1.使用服务器执行

https://blog.csdn.net/TurkeyCock/article/details/83317935

2.使用node执行

(1)编译.js文件

emcc extern.cc -o extern.js -s EXPORTED_FUNCTIONS='["_add","_min"]' 

(2)编写test.js

var em_module = require('./extern.js');
console.log("add:"+em_module._add(4,5));
console.log("add:"+em_module._min(5,4));

(3)运行

Node node-test.js

emcc生成wasm,wast,bc文件的方法相关推荐

  1. php二维码存放json数据_PHP生成及获取JSON文件的方法

    本文实例讲述了PHP生成及获取JSON文件的方法.分享给大家供大家参考,具体如下: 首先定义一个数组,然后遍历数据表,把相应的数据放到数组中,最后通过json_encode()转化数组 json_en ...

  2. linux怎么编译ipa,关于自动编译iOS工程,生成app及ipa文件的方法

    关于自动编译iOS工程,生成app及ipa文件的方法1.所需语句(可直接在命令行中执行) xcodebuild -configuration Release 进入所在工程的根目录文件夹,执行上面的语句 ...

  3. 怎么用python创建文件-如何用Python创建生成xml文档文件的方法

    用如何用Python完成创建生成xml文档文件的工作. 需要用到的方法:from xml.dom.minidom import Document,想必大家很熟悉这个操作了,接下来就用python 创建 ...

  4. 生成内核版本号头文件的方法

    前段时间,公司买了很多块不同厂家的intel的板子.有同事编译不了网卡驱动,我过去看了一下,原来是因为内核版本号的头文件(version.h)没有内容,导致没有定义LINUX_VERSION_CODE ...

  5. quartus生成qdb文件_quartus 生成qxp和vqm文件的方法

    详解 Quartus 导出网表文件: .qxp 和 .vqm 当项目过程中,不想给甲方源码时,该如何?我 们可以用网表文件 qxp 或者 vqm 对资源进行保护. 下面讲解这两个文件的具体生成步骤: ...

  6. 关于keil/MDK生成pat/bin/汇编文件的方法

    在配置中找到user 然后在after选项中添加如下指令fromelf --vhx --32x1 --output "@P.pat" "#L" 然后在RUN#1 ...

  7. 怎么使用 javah 工具生成 C 语言头文件

    使用 javah 工具生成 C 语言头文件的方法如下: 确保你的 Java 环境已经安装完毕,并且已经将 JDK 的 bin 目录加入了系统的 PATH 环境变量中. 打开命令提示符或终端窗口,进入到 ...

  8. idea怎么使用jacoco生成报告_Intellij IDEA解析jacoco结果文件的方法

    Intellij IDEA解析jacoco结果文件的方法 JaCoCo经常用来分析代码覆盖率,最方便的当然是在Jenkins中集成,能很定时分析代码覆盖率并查看变化情况.如果需要单独查看某一模块中的覆 ...

  9. Silverlight中文件的生成操作与其对应的获取方法

    文件生成操作: Silverlight里的资源文件(图片.视频.字体.XML.XAML等) 生成操作属性选择不同选项时,文件的生成方式和存储位置会有相应变化,下面说一下几个常用的选项: 1. Page ...

  10. php读取cookie文件,PHP读取CURL模拟登录时生成Cookie文件的方法,_PHP教程

    PHP读取CURL模拟登录时生成Cookie文件的方法, 本文实例讲述了PHP读取CURL模拟登录时生成Cookie文件的方法.分享给大家供大家参考.具体实现方法如下: 在使用PHP中的CURL模拟登 ...

最新文章

  1. 学习编写Unity计算着色器 Learn to Write Unity Compute Shaders
  2. vue基础整理-组件
  3. 高级(复杂)指针的含义
  4. Linux 基础学习大考核
  5. 电离辐射防护与辐射源安全基本标准_漳武南靖段A1项目成功举办桥面系 安全防护标准化观摩会...
  6. 计算机网络(二十四)-路由算法及路由协议
  7. 常见熟知端口号的记忆技巧
  8. ARM开发6.3.3 基础实训( 3 ) 两个 LED 显示二位数(静态显示)--LPC21XX
  9. 备战BAT面试-死磕mysql|mysql 是如何做到存储两千万数据毫无压力的?
  10. word中没文字地方添加下划线方法
  11. 诡异大阳飙升动因何在
  12. 关于topk accuracy
  13. 潇洒老师分享的小知识:注塑模具“压模”的原因和预防措施
  14. iPhone iPad 设备型号对应表
  15. java web打包神器_前端开发人员的桌面应用神器 Electron
  16. MySql 根据身份证号判断年龄所属省份与性别男女
  17. CPU使用率过高咋办?看这里
  18. 无领导小组讨论应对技巧及经典案例
  19. 电力拖动自动控制系统(一)直流调速系统篇--不可逆系统(1)
  20. 中国开源项目哪家强?看看阿里,百度,腾讯,360,新浪,网易,小米等都开源了什么

热门文章

  1. 叒一次算法作业hhhhhhhh
  2. mac 屏幕录制专家
  3. Java中模拟评分系统_评分系统.java
  4. 如何在iPhone上将GIF设置为动态壁纸
  5. WIFI共享大师无法开启发射功能
  6. Linux导出Excel图片水印中文乱码解决
  7. html调用电脑/手机摄像头拍照上传+百度文字识别
  8. Unable to partial resync with the slave for lack of backlog (Slave request was: 2595405802583).
  9. xls解密(实战详细教程)
  10. Python 对象烤地瓜