emcc编译与部分重要参数选取

2021-01-22 21:59:34

参考地址 emcc编译与部分重要参数选取

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
参考文档:

emcc是webassemble的编译器,类似于gcc的作用。

编译流程

emcc编译C/C++代码的流程:

C/C++代码通过emcc编译为字节码,然后根据不同的目标编译为asm.js或wasm。emcc和gcc编译选项类似,例如-s OPTIONS=VALUE、-O等。另外为了适应Web环境,emcc增加了一些特有的选项,如–pre-js 、–post-js 等。

emcc选项参数可以通过emcc -help察看
emcc --help

使用例子:

// 不带-O3, 生成的依赖项比较多一些
emcc temp.cc -o temp.js -s EXPORTED_FUNCTIONS='["_add", "_dec"]'

// 带-O3, 如果没有std::cout,则没有其它依赖项
emcc temp.cc -o temp.js -s EXPORTED_FUNCTIONS='["_add", "_dec"]' -O3

// 编译样例,使用ES6,线程中运行,生成单js文件
emcc -O3 -s EXPORT_ES6=1 -s ENVIRONMENT='worker' -s MODULARIZE_INSTANCE=1 -s EXPORT_NAME="test" -s WASM_ASYNC_COMPILATION=0 -s SINGLE_FILE=1 -s ALLOW_MEMORY_GROWTH=1 -s EXPORTED_FUNCTIONS="['_add', '_dec']" test.cc -o test.js12345678

部分重要的选项

// link选项 -O0时显示的日志调试信息最完整,生成的js文件的格式名称也都是易读的,强烈建议一开始调试时用该选项
// Note: O3 is a good setting for a release build
emcc -Oz > Os > O3 > O2 > O1 > O0 (O0-default)

// WASM=0生成asm.js格式(适用于WebAssembly不支持的情况)
// WASM=1生成包含wasm格式
// WASM=2 asm.js与wasm格式均生成,添加支持判定,优先使用wasm格式。
-s WASM=1 (0/1/2);

// 是否异步加载wasm,主线程需要用异步,worker中可以同步加载 // Whether to compile the wasm asynchronously
-s WASM_ASYNC_COMPILATION=1;

// 设定当前的运行环境,避免生成的js文件中判定环境,并运行不同的代码
// ‘web’ - the normal web environment.
// ‘worker’ - a web worker environment.
// ‘node’ - Node.js.
// ‘shell’ - a JS shell like d8, js, or jsc.
// e.g., “web,worker”. If this is the empty string, then all runtime environments are supported.
-s ENVIRONMENT=’’;

// 指定内存的大小和是否内存会增长
-s INITIAL_MEMORY=16777216
-s MAXIMUM_MEMORY=16777216
-s ALLOW_MEMORY_GROWTH=0/1

// 导出模块名称,常和MODULARIZE_INSTANCE/MODULARIZE配合使用
-s EXPORT_NAME=‘Module’;
// 是否生成模块instance(单例),返回{}这种格式,并且初始化wasm
-s MODULARIZE_INSTANCE=0(0/1);
// 是否生成模块,返回function这种格式,模块可以初始化多个object
-s MODULARIZE=0(0/1);

// 是否导出ES6模式 Export using an ES6 Module export rather than a UMD export. MODULARIZE must be enabled for ES6 exports.
// It might not be supported on old browsers.
-s EXPORT_ES6=0/1

// js中内容尽量多的放入wasm中实现,减少依赖
-s STANDALONE_WASM = 0(0/1);

// If set to 1, embeds all subresources in the emitted file as base64 string literals
-s SINGLE_FILE = 0 (0/1);

// 是否是worker模式 If set to 1, this is a worker library, a special kind of library that is run
-s BUILD_AS_WORKER=0/1

// 设置输出的名称:需要提前定义该object={},编译出的模块中会填充object函数方法 (用起来有一些问题)
-s EXPORT_NAME = ‘Module’;

(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)


  • 2020-04-17 11:28:35

    TweenMax中文初级教程二

    TimelineMax是GreenSock 动画平台中的动画组织、排序、管理工具,可创建时间轴(timeline)作为动画或其他时间轴的容器,这使得整个动画控制和精确管理时间变得简单,避免了通过反复delay和回调进行动画。 作者:李霖弢 链接:https://www.jianshu.com/p/8c0361e43bf5 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

  • 2020-04-17 11:28:57

    TweenMax中文初级教程三

    动画关键词:CSS(一般可以省略) CSSPlugin用于在TweenMax中对DOM元素的CSS相关属性进行动画 在CSSPlugin中CSS属性需要写成驼峰式,例如font-size应当写作fontSize。有时候你可以在一些默认px为单位的属性中省略单位,CSSPlugin还可以在不同的单位间做动画:

  • 2020-04-17 11:29:23

    TweenMax中文初级教程四

    用于滚动窗口(类似于window.scrollTo(x, y))或DOM元素(如myDiv.scrollTop = y; myDiv.scrollLeft = x;)。滚动窗口时使用window作为动画目标。

  • 2020-04-17 14:06:29

    图片解释EaseIn,EaseOut,EaseInOut

    1.EaseIn:即缓动发生在入口处,也就是刚开始的时候。 2.EaseOut:即缓动发生在出口处,也就是结束之前。 3.EaseInOut:就是两边都有缓动了.

  • 2020-04-21 14:47:13

    Redis危险命令重命名、禁用

    flushdb,清空数据库 flushall,清空所有记录,数据库 config,客户端连接后可配置服务器 keys,客户端连接后可查看所有存在的键

  • 2020-04-21 15:13:15

    redis 简单使用

    Redis和Memcached类似,也属于k-v数据存储 Redis官网 https://redis.io支持更多value类型,除了和string外,还支持hash、lists(链表)、sets(集合)和sorted sets(有序集合) Redis是可以把数据存储在磁盘上的并且使用了两种文件格式:全量数据(RDB)和增量请求(aof)。一般叫做redis持久化 全量数据格式是把内存中的数据写入磁盘,便于下次读取文件进行加载。

  • 2020-04-21 15:14:20

    SpringBoot + Redis:基本配置及使用

    # Redis数据库索引(默认为0) spring.redis.database=0# Redis服务器地址 spring.redis.host=127.0.0.1# Redis服务器连接端口 spring.redis.port=6379# Redis服务器连接密码(默认为空) spring.redis.password=# 连接池最大连接数(使用负值表示没有限制) spring.redis.jedis.pool.max-active=20# 连接池最大阻塞等待时间(使用负值表示没有限制) spring.redis.jedis.pool.max-wait=-1# 连接池中的最大空闲连接 spring.redis.jedis.pool.max-idle=10# 连接池中的最小空闲连接 spring.redis.jedis.pool.min-idle=0# 连接超时时间(毫秒) spring.redis.timeout=1000