将Emscripten编译器与Intel® XDK一起使用






4.67/5 (7投票s)
Intel(R) XDK 是一款 HTML5 跨平台开发工具,可帮助您轻松快捷地将应用推向市场。Emscripten 编译器和 Intel XDK 现在为您提供了另一种选择,可以使用 C 和 C++ 作为应用程序的一部分来发布应用。
Intel® Developer Zone 提供跨平台应用开发工具和操作指南、平台和技术信息、代码示例以及同行专业知识,以帮助开发人员创新并取得成功。加入我们的社区,面向 Android、物联网、Intel® RealSense™ 技术 和 Windows 下载工具、访问开发套件、与志同道合的开发人员分享想法,并参与黑客马拉松、竞赛、路演和本地活动。
引言
Emscripten 将 C 和 C++ 编译为 Javascript。这允许使用 HTML5 运行 C 和 C++ 程序。Intel(R) XDK 是一款 HTML5 跨平台开发工具,可帮助您轻松快捷地将应用推向市场。Emscripten 编译器和 Intel XDK 现在为您提供了另一种选择,可以使用 C 和 C++ 作为应用程序的一部分来发布应用。
动机
C 和 C++ 是使用最广泛、最深入理解且最活跃的编程语言之一。基于 C 和 C++ 的程序和库仍在不断地创建和维护。工具、技术、文档、编程实践和开发人员的专业知识使 C 和 C++ 成为大量应用程序开发人员创建编程逻辑的首选语言。
一直以来,人们都有运行 C 和 C++ 程序并在 Web 浏览器中使用的强烈愿望,其中著名的项目包括 1995 年的 Netscape Plugin API (NPAPI) 以及自 2010 年以来可用的 Native Clients (NaCL/PnaCL)。
Emscripten 与众不同。它利用 LLVM 编译器前端基础设施,并输出到一种称为 ASM.js 的 Javascript 子集。因此,C 和 C++ 程序无需任何插件即可编译并运行在 Javascript 上。
Intel® XDK 是一款 HTML5 跨平台开发工具,可提供简化的工作流程,使开发人员能够轻松设计、调试、构建和部署应用商店。
谁可以从使用 Emscripten 将 C++ 应用编译为 JS 中受益?
1. 希望触及更广泛用户群体的 C++ 库和应用程序开发人员。
有兴趣分发已编译软件给 HTML5 开发人员的开发者,可以通过利用 Emscripten 构建基础设施来触及该受众。
由于 JavaScript(JS) 可以在浏览器和原生移动应用程序的 WebView 中原生运行,因此 JS 应用可以在运行浏览器的多个操作系统上广泛分发。使用 Intel XDK,您可以将应用定位到 Google* Android OS、Google* Chrome OS、Apple iOS,并通过 Android* Play 商店和 Apple* Store 进行分发。
JS 作为 HTML5 生态系统的一部分,包括层叠样式表 (CSS),能够提供丰富且响应迅速的用户界面,让您可以“皮肤化”应用程序,以自定义外观和感觉以满足目标受众的需求。
开发人员可以选择最适合他们偏好的分发模式,无论是开源(或不开源)使用 emscripten 生成的 JS 程序集文件。
Intel 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 标准兼容。[注意:使用原始指针存在一些限制]
* 与 Javascript 和 DOM 交互
Embind 工具链使得 JS 和 C++ 之间的互操作相对容易。可以提供可在 C++ 中调用的 JS 类,以及可在 JS 中调用的 C++ 类。
* 调试
JS 开发者工具(包括 Chrome DevTools 和 Firefox)支持源映射。
Emcc 生成 .map 文件,使调试有效且直观。
注意事项
JS 仍然是单线程的。多线程构造将继续工作,但应用程序将作为单线程应用程序运行。
SIMD.js 的支持意味着可以获得接近原生的性能。Intel Crosswalk 在设备上提供 SIMD 支持。模拟器尚未支持 SIMD。
开始使用 Emscripten
使用预先构建的 Javascript 库
也许从 Emscripten 中获益的最简单方法是将预先构建的库包含到您的项目中。流行的例子包括 ocrad(Javascript 中的 OCR)、SQLite(Javascript 版)、物理引擎 ammo.js 和 box2d.js。
像平常一样将 HTML5 项目导入 Intel XDK。请参阅此介绍以了解 如何将现有 HTML5 项目导入 Intel XDK。
安装最新版本的 Emscripten
请注意,以下说明与 Intel 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++ 文件,但 Intel 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>
将项目导入 Intel XDK,并在模拟器或编辑器中的 Live Layout 浏览器中打开它。
请注意,在控制台中,除了“Hello world”消息外,您还会看到 emcc 为您添加的平均预处理时间。
性能优化
默认优化级别 (-O0) 最适合验证正确的功能。在此优化级别下,调试体验更加愉快。一旦功能得到验证,更高的优化级别 -O2 或 -O3 可以提供额外的性能。O3 启用向量化。
参考:https://kripken.github.io/emscripten-site/docs/optimizing/Optimizing-Code.html
在 Intel XDK 中导入、调试和构建 HTML5 应用
您可以像处理 HTML5 应用一样,在 Intel XDK 中导入、构建和调试 Emscripten 生成的 HTML5 应用。您可以根据需要包含 Cordova API 调用。请参阅 Intel XDK 入门教程 以获取更多信息。