关于Emscripten

Emscripten是一个面向JavaScripten的开源LLVM编译器。(LLVM是构架编译器的框架系统,以C++编写而成,用于优化以任意程序语言编写的程序的编译时间<compile-time>、链接时间<link-time>、运行时间<run-time>以及空闲时间<idle-time>,对开发者保持开放,并兼容已有脚本)。

  • 将C和C++代码编译为JavaScripten。
  • 将任意能被转化为LLVM中间代码的代码编译为JavaScripten。
  • 将其他语言的C/C++运行时编译为JavaScripten,然后以一种间接的方式运行这些其他语言的代码(Python和Lua已经这样做了)。
Tip
Emscripten 使本地代码在Web上立即可用:这是一个标准化的平台,拥有许多兼容且独立的实现,可以运行在PC或者ipad等任何地方。
使用Emscripten,C/C++开发者不用话费高成本将代码手动移植到JavaScript,也根本不需要学习JavaScript。Web开发者也会受益,因为他们可以在自己的站点中使用成千上万的已经存在于本地的实用程序和库。

实际上,任何可移植的C或者C++代码库都可以使用Emscripten编译成JavaScripten,包括需要渲染图形、播放声音、加载和处理文件的高性能游戏,以及Qt之类的应用程序框架。Emscripten 已经被用于将非常多的本地代码库转化为JavaScript,包括大型项目如CPython,Poppler和Bullet Physics Engine,以及商业项目如Unreal Engine 4和Unity Engine。
Emscripten生成的代码执行速度极快!它默认输出格式是asm.js,这是一个高度优化的JavaScript子集,在多数情况下可以以接近原生代码的速度执行。在都用gzip压缩时,优化的Emscripten代码和原生代码的有效大小也相似。

Emscripten工具链

下面给出的是Emscripten工具链的高级视图。这里面最主要的工具是Emscripten前端编译器<Emscripten Compiler Frontend(emcc)>。这是对标准编译器(如gcc)的一个完全替代。

Emcc使用Clang或者LLVM来将代码编译为wasm或者asm.js。Emscripten编译得到的JavaScript代码可以运行编译后的代码并提供必要的运行时支持。这样的JavaScript代码可以被node.js执行或者在浏览器中从HTML执行。
Emscripten SDK(emsdk)用来管理多个SDK和工具,并制定当前用于编译的特定工具的SDK(活动工具/SDK)。它甚至可以从GitHub"安装"(下载并构建)最新的工具链!
Emsdk将“活动”配置写入Emscripten编译器配置文件中(.emscripten)。这个文件被emcc用来获得对于当前编译来说,用于构建的正确的工具链。
还有许多其他工具没有展示——例如:emcc可以选择性使用Java来运行闭包编译器,这可以进一步减小代码大小。
整个工具链由Emscripten SDK提供,并且可以被用于Linux,Windows或者macOS平台。

移植代码以使用Emscripten

Emscripten对可移植的C/C++代码支持相当全面。对C标准库,C++标准库,C++异常等的支持非常好。对SDL支持足够运行大量代码。OpenGL的支持方面,Emscripten对OpenGL ES 2.0类型的代码支持非常优秀,对于其他类型的支持也是可以接受的。
本机运行时环境和Emscripten运行时环境存在一些差异,这意味着通常需要对本机代码进行一些更改。也就是说,许多应用将只需要改变它们定义主循环的方式,并修改它们文件处理就能适应浏览器或JavaScript的限制。
还有一些限制可以使某些代码更容易移植——阅读移植指导来确定你可能需要在哪些地方花费更多精力。

1.1 关于emscripten相关推荐

  1. Emscripten教程之入门指导

    翻译:云荒杯倾 本文是Emscripten-WebAssembly专栏系列文章之一,更多文章请查看专栏. 也可以去作者的博客阅读文章. 欢迎加入Wasm和emscripten技术交流群,群聊号码:93 ...

  2. Emscripten教程之C++和JavaScript绑定(三)

    翻译:云荒杯倾 Embind用于绑定C++函数和类到JavaScript,这样编译代码就能在js中以一种很自然的方式来使用.Embind也支持从C++调JavaScript的class. Embind ...

  3. Emscripten中的虚拟文件系统

    一.加载文件(读数据) 使用fopen,fread等操作. 编译选项中添加: --preload-file a.data 二.写数据 只有MEMFS文件系统是默认包含的,其他必须使用链接标志使能. N ...

  4. Emscripten的研究与学习 --- 初探Emscripten

    目录 一.环境概况 二.环境准备 2.1 Git软件 2.1.1 Windows安装 2.2.2 linux安装 2.2 Python软件 2.2.1 Windows安装 2.2.2 linux安装 ...

  5. 集成Emscripten+wasm至React项目踩坑记录

    前言 需求是有一个C++写的工具包(负责大规模的数据运算). 需要用emscripten是把C/C++编译成WebAssembly,便于在JS环境之后执行. 最终在React项目中调用工具包. 数据类 ...

  6. 基于Ubuntu20.04配置Emscripten开发环境

    Emscripten环境配置 1.简介 2.依赖环境 3.环境搭建 4.辅助调试环境 1.简介 Emscripten 编译器基于 LLVM ,该编译器可以将 C / C++ 的代码编译成 JavaSc ...

  7. WebAssembly emscripten工具链的搭建

    emscripten有多个版本,这里安装的是WebAssembly需要的版本. 需要提前安装gcc.cmake.Python.node.js等,这些请自行安装. 开始安装emscripten: 1.下 ...

  8. emscripten安装教程

    emscripten安装教程 最近在学习制作微信小程序,但是微信小程序好像只能上传 .js .json .wxml .wxss这四类文件,具体功能就不赘述了.而我的源程序是C语言代码,想换成js语言, ...

  9. Emscripten编译器安装教程,亲测成功编译出第一个WebAssembly

    javascript 这门语言的性能无法与原生的C/C++代码相媲美,为了进一步提高网页的性能,业界推出了WebAssembly技术:将C语言编译成了浏览器可以执行的wasm文件.WebAssembl ...

  10. Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)并执行wasm

    <一>˙转换 Emscripten实现把C/C++文件转成wasm,wast(wasm的可读形式),llvm字节码(bc格式),ll格式(llvm字节码的可读形式)的步骤: 最新版本的Em ...

最新文章

  1. Mysql导入zabbix的sql语句时报错:ERROR 1045 (28000)
  2. 手机进水急救——爆米花可用来吸干水分
  3. 机场精细化管理_宇视科技智慧机坪解决方案助力机场实现精细化管理
  4. java执行class找不到main函数_你所不知道的HelloWorld背后的执行原理
  5. 宁德时代上半年实现营业收入440.75亿元,净利润44.84亿元
  6. 一行代码如何隐藏 Linux 进程?
  7. [译] Martin Fowler - Web 应用安全基础
  8. MYSQL查询重复记录的方法
  9. 树和森林(Tree and Forest)
  10. 如何卸载删除sql2005
  11. GPS模拟器中的传输时间计算
  12. AI人工智能开发的5种最佳人工智能编程语言
  13. java对象转为map_浅谈对象与Map相互转化
  14. 【IIS】修改注册表键值提升IIS的性能
  15. WizTree v4.03 最快的磁盘空间分析工具中文便携版
  16. 黑眼圈大神程序员用5000字带你通透读懂Elasticsearch的注意事项
  17. IBus拼音无法选择候选词故障
  18. 微信小程序中的 tabBar
  19. GP技术的展望——道生一,一生二
  20. 靖哥哥教你如何安装chrome浏览器离线插件

热门文章

  1. Spring Boot 实践折腾记(11):使用 Spring 5的WebFlux快速构建效响应式REST API
  2. Python中flatten( )函数及函数用法详解
  3. JavaScript设计模式——迭代器模式
  4. python 生成html文档,Python使用pyh生成HTML文档的方法示例
  5. Spring Security Config : HttpSecurity安全配置器 SessionManagementConfigurer
  6. uni-app/Vue实现 购物车页面功能的业务逻辑
  7. 业财税一体化被重新定义后,财务正在成为数字化的“超级入口”
  8. Java 生产神器 BTrace
  9. [Bootstrap]组件(一)
  10. 开源的定义_共享与自由与公共:开源的真正定义