文章目录

  • 1. Emscripten简介
    • 1.1 诞生背景
    • 1.2 什么是Emscripten
  • 2. 安装Emscripten
    • 2.1 前置条件
    • 2.2 下载安装过程
  • 3. 示例
  • 4. 参考资料

1. Emscripten简介

1.1 诞生背景

Web 技术突飞猛进,但是有一个领域一直无法突破 ---- 游戏。

游戏的性能要求非常高,一些大型游戏连 PC 跑起来都很吃力,更不要提在浏览器的沙盒模型里跑了!但是,尽管很困难,许多开发者始终没放弃,希望让浏览器运行 3D 游戏。

2012年,Mozilla 的工程师 Alon Zakai 在研究 LLVM 编译器时突发奇想:许多 3D 游戏都是用 C / C++ 语言写的,如果能将 C / C++ 语言编译成 JavaScript 代码,它们不就能在浏览器里运行了吗?众所周知,JavaScript 的基本语法与 C 语言高度相似。

于是,他开始研究怎么才能实现这个目标,为此专门做了一个编译器项目 Emscripten。这个编译器可以将 C / C++ 代码编译成 JS 代码,但不是普通的 JS,而是一种叫做 asm.js 的 JavaScript 变体。

1.2 什么是Emscripten

Emscripten 官方是这么描述的:

Emscripten is a toolchain for compiling to asm.js and WebAssembly, built using LLVM, that lets you run C and C++ on the web at near-native speed without plugins.

翻译下来就是:

Emscripten是一个工具链,作用是通过LLVM来编译生成asm.js、WebAssembly字节码,目的是让你能够在网页中接近最快的速度运行C和C++,并且不需要任何插件。

Emscripten 是一种基于LLVM的编译器,理论上能够将任何能够生成LLVM位码的代码编译成javascript的严格子集asm.js,实际上主要用于将C/C++代码编译成asm.js。

2. 安装Emscripten

2.1 前置条件

想要编译成WebAssembly,你首先需要先编译 LLVM。这是运行后续工具的先决条件。

  • Git。Linux 和 OS X 系统中好像已经默认装好了,在 Windows 上需要在这里安装 Git。
  • CMake。在 Linux 和 OS X系统中,你可以使用包管理工具 apt-get 或 brew 来安装。如果是 Windows 系统,你可以点击这里。
  • 系统编译工具。Linux上,安装 GCC。OS X 上,安装 Xcode。Windows 上安装 Visual Studio 2015 Community with Update 3 或更新版本。
  • Python 2.7.x,在 Linux 和 OS X上,很可能已经装好了。看这里。

安装完毕后,确认 git,cmake 和 python 已经在你的环境变量里,可以使用。

2.2 下载安装过程

从源码编译安装十分麻烦,推荐安装核心的Emscripten SDK。

1、Windows环境

  • 先使用如下命令下载emsdk。
# Get the emsdk repo
git clone https://github.com/emscripten-core/emsdk.git# Enter that directory
cd emsdk
  • 再使用如下命令安装配置Emscripten。
# Fetch the latest registry of available tools.
.\emsdk.bat update# Download and install the latest SDK tools. Need install Python first.
.\emsdk.bat install latest# Make the "latest" SDK "active" for the current user. (writes ~/.emscripten file)
.\emsdk.bat activate latest# Activate PATH and other environment variables in the current terminal
.\emsdk_env.bat
  • 使用如下命令验证Emscripten是否安装配置正确。
# Enter that directory
cd emsdk# Activate PATH and other environment variables in the current terminal
.\emsdk_env.bat# Verifying Emscripten
emcc.bat -v

2、Linux环境

  • 先使用如下命令下载emsdk。
# Get the emsdk repo
git clone https://github.com/emscripten-core/emsdk.git# Enter that directory
cd emsdk
  • 再使用如下命令安装配置Emscripten。
# Fetch the latest registry of available tools.
./emsdk update# Download and install the latest SDK tools. Need install Python first.
./emsdk install latest# Make the "latest" SDK "active" for the current user. (writes ~/.emscripten file)
./emsdk activate latest# Activate PATH and other environment variables in the current terminal
./emsdk_env.sh
  • 使用如下命令验证Emscripten是否安装配置正确。
# Enter that directory
cd emsdk# Activate PATH and other environment variables in the current terminal
./emsdk_env.sh# Verifying Emscripten
emcc -v

3. 示例

  1. 创建名为 helloworld.cpp 的文件,其内容如下:
#include <stdio.h>int main() {printf("hello, world!\n");return 0;
}
  1. 使用如下命令编译:
emcc.bat helloworld.cpp

编译后将生成a.out.jsa.out.wasm两个文件。后者是包含编译后代码的WebAssembly文件,前者是用于加载和执行后者的Javascipt文件。

  • emcc是 Emscripten 的编译命令,它的用法非常简单:
# 生成 a.out.js
emcc.bat helloworld.cpp# 生成 helloworld.js
emcc.bat helloworld.cpp -o helloworld.js# 生成 helloworld.html 和 helloworld.js
emcc.bat helloworld.cpp -o helloworld.html
  1. 使用如下命令测试编译后生成的代码,将输出“hello,world!”。
node a.out.js

注:需要本地安装 NodeJS 的运行环境

4. 参考资料

  • asm.js 和 Emscripten 入门教程
    http://www.ruanyifeng.com/blog/2017/09/asmjs_emscripten.html

  • Emscripten教程
    https://huangwang.github.io/2018/07/15/Emscripten%E6%95%99%E7%A8%8B/

Emscripten简介及初体验相关推荐

  1. webpack从入门到精通(一)初体验

    1. webpack简介 1.1 webpack是什么 webpack 是一种前端资源构建工具,一个静态模块打包器(module bundler). 在 webpack 看来, 前端的所有资源文件(j ...

  2. 云起实验室有奖征文,精美好礼等你来领——《我的linux初体验》

    简介:云起实验室面向开发者提供免费云产品资源.沉浸式体验环境.手把手操作手册,帮助开发者实现上云第一站,快速学习了解云计算及云产品. 今年七月份,社区平台全面升级,特别推出"乘风者计划&qu ...

  3. 我的Go+语言初体验--Go+之环境安装与程序编码初体验

    一.Go+ 简介 对于 Go+ 工程而言: Go+ 将支持所有 Go 功能(包括部分支持 cgo): Go+ 提供了更简单优雅的语法,比 Go 更接近自然语言: Go+ 易于学习,不必在一开始就处理工 ...

  4. Mysql数据库(一)——mysql数据库初体验

    Mysql数据库(一)--mysql数据库初体验 一.数据库的概念 1.数据库的组成 ①.表 ②.数据库 2.数据库类型 ①.关系型数据库 ②.非关系型数据库(NoSQL (Not Only SQL) ...

  5. .NET WebSocket 核心原理初体验

    上个月我写了<.NET gRPC核心功能初体验>, 里面使用gRPC双向流做了一个打乒乓球的Demo, [实时][双向]这两个标签是不是很熟悉,对, WebSockets也可以做实时双向通 ...

  6. oracle数据库dblink创建语句_3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  7. python简单体育竞技模拟_python初体验 —— 模拟体育竞技

    python初体验 -->>> 模拟体育竞技 一.排球训练营 1. 简介: 模拟不同的两个队伍进行排球的模拟比赛. 2. 模拟原理: 通过输入各自的能力值(Ⅰ),模拟比赛的进行( P ...

  8. 3场直播丨达梦DM8数据库安装部署初体验、新基建下的国产数据库应用和发展趋势、Oracle外部表创建与使用...

    1. 循序渐进-达梦DM8数据库安装部署初体验-07/16 简介: 本讲座主要介绍达梦DM8数据库软件安装与数据库创建. 2019年5月,DM8发布. 基于新技术发展的思考和市场的需求,坚持实用性.通 ...

  9. Consul在.Net Core中初体验

    Consul在.Net Core中初体验 原文:Consul在.Net Core中初体验 简介 在阅读本文前我想您应该对微服务架构有一个基本的或者模糊的了解 Consul是一个服务管理软件,它其实有很 ...

最新文章

  1. 梦断代码阅读笔记03
  2. mysql5.7 5.6从库_mysql5.7搭建主从库
  3. VB随笔 -基本语句之循环语句
  4. python画散点图类型-Pandas / Pyplot中的散点图:如何按类别绘制
  5. linux下confstr与uname函数_获取C库与内核信息
  6. mysql分库分表实战及php代码操作完整实例
  7. 使用Instant Client配置PL/SQL Developer
  8. vim 编译 Python 代码提示配置
  9. 浅谈SQL中存储过程和自定义函数的区
  10. Snabbdom(虚拟dom-9-patchVnode函数)
  11. Springboot连接不上mysql8_springboot连接mysql8.0问题解决
  12. SQL Server 字符串拆分
  13. 并发编程之美(1)并发编程基础二
  14. 百度App网络深度优化系列《一》DNS优化
  15. 在.net framework程序中承载asp.net core
  16. 前端开发常用网站整理
  17. 剖析 TCP协议内部结构
  18. TC8:IPv4_REASSEMBLY_01-13
  19. 结婚吉日怎样挑选?好好把握幸福启程
  20. HTML+CSS ---- 背景图片

热门文章

  1. C++实现rtmp服务器和客户端
  2. 掌优腾讯云喇叭收款好帮手
  3. 脊髓损伤怎么康复好?成都顾连康复治疗专业可靠
  4. Ansible配置中的常用参数
  5. 深入浅出说邮件服务器对企业信息化的作用
  6. 安装GotoBLAS和hpl
  7. 怎么除眼袋 苹果切片敷眼袋
  8. 在x86_64平台搭建飞腾ARM交叉编译环境
  9. ubuntu18安装和美化教程
  10. 周易六十四卦——歸妹卦