emcc生成wasm,wast,bc文件的方法

2021-01-22 21:56:48

一、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


  • 2019-04-30 11:42:24

    php7+laravel+coreseek(sphinx)中文搜索初步实现(Linux)

    官网www.coreseek.cn已不能下载,所以需从网上找资源, 注意的一点是,笔者安装coreseek-3.2.14版本后,使用时提示client版本高于server版本的错误, php的sphinx扩展,为使用者,为client;coreseek是系统服务,为server

  • 2019-04-30 13:55:13

    浅谈mysql fulltext全文索引优缺点

    为什么会注意到mysql的fulltext? nima, 还是上次innodb转成tokudb引擎的事,这次alter修改表引擎的时候,提示percona tokudb是不支持fulltext索引的.

  • 2019-04-30 18:56:52

    elasticsearch文档操作

    使用了Elasticsearch提供的一整套强大的REST API,本文继续来看通过这一套API如何完成文档的基本操作。

  • 2019-05-05 14:04:11

    PHP使用CURL模拟POST/GET/PUT/DELETE方式提交数据

    最近因为工作需要,调用网盘接口来上传文件,我用了CURL库, 当然在用CURL库之前必须要在php中启用 cURL 设置 可以通过使用php_info()函数来得到cURL信息,如果看不到cURL信息的话,那么需要设置PHP并开启这个库。在Windows平台下,需要改一改php.ini文件的设置,找到 php_curl.dll,并取消前面的分号注释就行了。

  • 2019-05-07 00:04:04

    Tcpdf不使用css来实现线上合同和签章,图片悬浮

    以前虽然有了解过Tcpdf的用法,但是没有实际的应用过,最近在用tcpdf的时候发现对css支持很有限,使的如果想实现类似html的种种效果都很难,而我这次要做的就是 图片悬浮在文字上方形成类似水印或者盖章的效果。