简介
Emscripten 可将 C 和 C++ 编译成 Javascript。 这样有助于借助 HTML5 运行 C 和 C++ 程序。 英特尔 XDK 是一款 HTML5 交叉平台开发工具,可帮助您轻松、快速地将应用推向市场。 有了 Emscripten 编译器和英特尔 XDK,您现在又多了一种使用 C 和 C++ (作为应用一部分)发布应用的选择。
推动因素
C 和 C++ 是使用范围最广、用户了解最多、最为活跃的编程语言。 基于 C 和 C++ 的程序和资源库还在不断的创建和维护。 由于具备齐全的工具、技巧、文档、编程实践和专业开发知识,许多应用开发人员均选择 C 和 C++ 语言创建编程逻辑。
人们常常希望使用 web 用户代理运行 C 和 C++ 程序。因此,自 1995 年起包括 Netscape Plugin API (NPAPI) 在内的许多知名项目相继开发,此外,自 2010 年起,Native Clients (NaCL/PnaCL) 也开始面市。
Emscripten 则与众不同。 它利用 LLVM 编译器前端基础设施并输出至 Javascript 的子集(名为 ASM.js)。 这带来的直接结果就是,C 和 C++ 程序经过编译后可在 Javascript 上运行,无需任何插件。
英特尔® XDK 是一款 HTML5 交叉平台开发工具,可提供简化后的工作流支持开发人员轻松设计、调试、构建应用,并将其部署至应用商店。
谁可以使用 Emscripten 将 C++ 应用编译至 JS,并从中获益?
1. 有兴趣积累更大客户群的 C++ 库和应用开发人员。
那些希望将编译后的软件分发给 HTML5 开发人员的开发人员能够通过利用 Emscripten 构建基础设施来积累受众。
由于 JavaScript(JS) 能够在浏览器和本地移动应用中的 webview 中以本机方式运行,因此 JS 应用广泛分布于多种操作系统(在浏览器中运行)中。 使用英特尔 XDK,您可以设计适用于 Google* Android 操作系统、Google* Chrome 操作系统和 Apple iOS 的应用,并通过 Android* Play 应用商店和 Apple* Store 应用商店发布应用。
作为 HTML5 生态系统(级联样式表 (CSS))的一部分,JS 拥有丰富的响应式用户界面,支持您为应用制作‘皮肤’,从而为目标受众量身打造独特的观感。
开发人员可以通过 emscripten 生成的 JS 汇编文件选择(是否)最迎合开源风格的分发模式。
英特尔 XDK 可帮助您轻松、快速地将应用推向市场。
2. 有兴趣访问目前仅 C 或 C++ 库提供的特性的 JS 开发人员。
Emscripten 通过 'embind'工具为 JS 和 C++ 函数提供丰富的双向通信。 JS 开发人员能够非常直观地通过 JS 访问 C 和 C++ 函数,以及 C++ 类。
Emscripten 工具链的优势
* 兼容 C 和 C++
emscripten 依赖 Clang 前端和 libc++,因此能够兼容 C++11 和 C++14 标准以及 C99 标准。 [注: 使用 Raw 指示器可能存在部分局限性]
* 与 Javascript 和 DOM 交互
embind 工具链有助于 JS 和 C++ 轻松实现互操作。 能够为 JS 提供可从 C++ 调用的类,以及可从 JS 调用的 C++ 类。
* 调试
包括 Chrome DevTool 和 Firefox 在内的 JS 开发人员工具支持源映射。
emcc 可生成 .map 文件以有效、直观地进行调试。
注意事项
JS 仍然为单线程。 多线程结构可以工作,但应用需以单线程应用的形式运行。
支持 SIMD.js 意味着可能会关闭本地执行。 英特尔 Crosswalk 提供基于设备的 SIMD 支持。 仿真器尚不支持 SIMD。
emscripten 入门
使用预构建的 Javascript 库
要想从 Emscripten 获益,最简单方法是将预构建的库添加到您的项目中。 常用的示例有 ocrad(Javascript 格式的OCR)、Javascript 格式的 SQLite,以及物理引擎 ammo.js和 box2d.js。
像往常一样将 HTML5 项目移植到英特尔 XDK。请参考本篇简介,以将现有 HTML5 项目移植到英特尔 XDK。
安装最新版 Emscripten
请注意,以下说明与英特尔 XDK 安装无关。
请按照 Emscripten 网站 https://kripken.github.io/emscripten-site/docs/getting_started/downloads.html提供的说明下载并安装最新版 Emscripten 工具链。
验证安装是否正确
假如安装正确,应向您提供了 emcc。 在命令提示窗口中输入以下内容,以验证 emcc 安装:
>emcc -v
构建 hello world 程序
在最喜欢的编辑器中通过以下内容创建并保存名为 hello.cpp 的文件。
#include <stdio.h> int main() { printf("Hello World!"); return 0; }
您可以使用任何编辑器编辑 C/C++ 文件,但英特尔 XDK 内置了能够编辑 C/C++ 文件的编辑器
编译并链接至 JS
> emcc hello.cpp -o index.js
将该 js 脚本包含在您的 html 项目中。
以下是关于内容 index.html 文件的示例
<!DOCTYPE HTML><head><title>emcc Hello World</title></head><body><script src="index.js"></script></body>
将项目移植到英特尔 XDK,并通过仿真器或编辑器中的 Live Layout 浏览器打开该项目。
请注意,控制台不仅显示消息,还会显示 emcc 添加的平均准备时间。
性能优化
最好使用默认优化级别 (-O0) 验证功能是否正确。 该优化级别可以为您提供更好的调试体验。 功能验证完成后,可以使用更高的优化级别(-O2 或 -O3)获得更高性能。 O3 支持矢量化。
参考: https://kripken.github.io/emscripten-site/docs/optimizing/Optimizing-Code.html
在英特尔 XDK 中移植、调试和构建 HTML5 应用
您可以在英特尔 XDK 中移植、构建和调试 emscripten 生成的 HTML5 应用,其方式与 HTML5 应用相同。 您可以根据需要纳入 Cordova API 调用。 请参阅英特尔 XDK 入门教程,了解更多信息。