65.9K
CodeProject 正在变化。 阅读更多。
Home

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

2015年12月1日

CPOL

5分钟阅读

viewsIcon

12703

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.jsbox2d.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 入门教程 以获取更多信息。

© . All rights reserved.