介绍
作者:技术咨询工程师 Bernth Andersson 和 Max Domeika
超移动设备 (UMPC) 的优点之一是,与面向笔记本和台式机市场的现有软件之间具有很高的兼容性。此外,由于针对 UMPC 的应用要求具备高性能,因而推动了高性能 C++ 编译器的使用。本文向您说明如何使用英特尔® C++ 编译器 9.1 Windows* 版来编译运行在 UMPC 设备上的程序。
定义
- 本文在菜单选项两侧放置“<”和“>”。例如,如果说明中指定您依次选择 <文件> <新建> <项目>,则表明您需要单击屏幕上的“文件”菜单,然后单击“新建”选项,再选择“项目”。
- SSE3 – SIMD 流指令扩展 3 是较新的几代 IA-32 架构中支持的指令集,可以提供高性能浮点和预取功能。
要求
假定您可以访问 UMPC 设备。文本所有示例中均使用 Samsung Q1 UMPC
i。该设备的高级功能部件如下:
- 英特尔® 赛扬® 处理器,900MHz ULV
- 40GB 硬盘
- 512 MB DDR2 主内存
- 7" 触摸屏(800x480 分辨率)
- 若干 I/O 端口(两个 USB、VGA 等)
- 设备运行 Microsoft Windows* XP 扩展版。
作为开发主机环境,使用了一台安装有 Microsoft Visual Studio 6.0(具有 Service pack 6)及英特尔® C++ 编译器 9.1 Windows*版的 IBM ThinkPad* T41p 笔记本电脑。此外,笔记本电脑还装有 Microsoft Tablet PC 平台 SDK。两个设备通过局域网 (LAN) 以固定 IP 地址与 Samsung Q1 连接。英特尔® C++ 编译器以默认安装选项安装在开发主机上。
生成并运行“Hello World”
- 打开 Microsoft Visual Studio,依次选择 <文件> <新建> <项目>。然后选择一个 Win32 应用程序,为项目指定一个名称。图 1 显示了使用项目名 UMPC_remote_test 的一个示例。您可能希望将位置更改为自己的测试目录。一切就绪后,请单击“确定”。

- 如图 2 所示,选择一个典型的“Hello World”应用程序,然后单击“完成”。

- 此时将生成一个类似于图 3 中所显示项目的默认项目。按 F7 键生成项目。不应产生任何错误或警告。之后生成一个可执行文件(exe 文件),您可以在主机笔记本电脑上进行测试。运行该可执行文件,应该会生成一个显示“Hello World”文本的窗口。

- 传输到 UMPC 设备。可通过 LAN 将示例应用程序传输到 UMPC 设备。其方法是与笔记本共享 Samsung Q1 上的 C 盘驱动器。您也可以选择使用远程桌面。
- 在 UMPC 设备上运行该应用程序。使用 UMPC 笔针双击 exe 文件启动程序。单击菜单项 <帮助>
<关于> 时将显示如图 4 所示的对话框。
采用独特 UMPC 功能的应用程序
采用编译器运行时库的应用程序
英特尔® C++ 编译器可以生成使用编译器的动态运行时库的可执行文件。UMPC 设备上需要提供这些库从而确保生成的可执行文件正确运行。例如,图 8 显示了计算 pi 值的控制台应用程序。借助英特尔® C++ 编译器中的 OpenMP* 功能,程序中的主循环被并行化。#pragma omp 添加在代码中 for-loop 的前面。
- 生成应用程序:在 Visual Studio 中打开一个新项目。然后在项目窗口中选择“Win32 控制台应用程序”,在控制台应用程序窗口中选择“简单应用程序”。现在应该打开了一个如图 9 所示的几乎为空的项目。在该控制台应用程序中添加计算 pi 的代码。一切就绪后,按 F7 键,然后更正所有错误。在开始链接阶段之前,会显示类似图 10 的一个关于“#pragma omp”的注释。该注释表明编译器确实在管理指定循环的并行处理。您现在应该已拥有一个 exe 文件。

- 将应用程序传输到 UMPC 设备:使用 LAN 连接将 exe 文件传输到 UMPC 设备。您将使用 UMPC 和笔记本电脑之间的共享文件夹。然后进行复制和粘贴操作或将 exe 文件拖放到 UMPC 上。
- 运行应用程序:双击 UMPC 设备上的 exe 文件。此时显示一个错误,指出由于缺少一个 DLL (libguide40.dll) 文件,应用程序无法启动。请参见图 11。

当应用程序被并行化时,它将依赖于 libguide40.dll 运行时库,因此如果无法访问该 DLL,则无法运行。
您可以将该 DLL(位于 <编译器安装目录>\compiler\9.1\IA32\lib)复制到您在 UMPC 上选择的文件夹中。例如,在我们的示例中,我们使用的是 C:\Program Files\Common Files\System。除非您将所需的 DLL 复制到 exe 文件所在的同一目录下,否则您需要确保环境变量 (PATH) 中包含所选目录的完整路径名。执行该应用程序,此时会显示类似图 12 的屏幕。
提示:如何了解应用程序依赖于哪个 DLL?有一个名为“Dependency Walker”的实用程序,它包含在 Microsoft Visual Studio 工具中。该实用程序可列出应用程序的依赖项。图 13 显示该实用程序的一个屏幕快照。

文件“credist.txt”中包含一个文件列表,可以随使用英特尔® C++ 编译器生成的应用程序一起再次分发。该文件位于 <编译器安装目录>\compiler\C++\9.1\Docs 中。
已知问题
英特尔® C++ 编译器 9.1 Windows*版支持较新版本的英特尔® IA-32 架构上提供的指令集。例如,本文中使用的 UMPC 设备装有不支持 SSE3 的英特尔® 赛扬® 处理器。因此,开发人员应该避免使用生成 SSE3 指令的选项,因为这些指令无法在给定 UMPC 设备上正确执行。请参考下表:
在 UMPC 设备上安装英特尔® C++ 编译器 9.1 Windows*版
Samsung Q1 设备允许您将外部 DVD 驱动器连接到该设备。如果您希望在此类设备上安装 Microsoft Visual Studio 和英特尔® C++ 编译器,则建议您执行该操作。其效果已经过验证,您只需按照安装指南操作。但是您应该清楚,它的屏幕大小有限,将它用作开发环境会不太方便。
结论
您可以使用英特尔® C++ 编译器开发用于 UMPC 设备的应用程序。由于 UMPC 设备是典型的嵌入式交叉开发环境,您需要明白,如果您的应用程序依赖于任何运行时库,则必须将这些库传输到该设备上,这样应用程序才能正常运行。同时您需要了解 UMPC 设备中使用的处理器,确保指定的编译器选项可以生成兼容的代码。
作者简介
Bernth Andersson 是英特尔开发人员产品部门的软件工程师,参与开发了面向英特尔架构市场的软件工具。在过去的 20 年中,Bernth 在英特尔软件和架构支持与培训部门担任过多项职务。目前,Bernth 负责对针对嵌入式英特尔架构的各种产品提供技术咨询。Bernth 拥有 瑞典 Umea 大学数学专业的理学学士学位。
Max Domeika 是英特尔开发人员产品部门的高级软件工程师,参与开发了面向英特尔架构市场的软件工具。在过去的 10 年中,Max 在英特尔担任编译器开发方面的多项职务,其中包括 C++ 前端的项目负责人以及优化器与 32 位英特尔 架构代码生成器的开发人员。目前,Max 负责对针对嵌入式英特尔架构的各种产品提供技术咨询。Max 还参与软件工具培训,是英特尔软件学院的讲师。Max 拥有菩及湾大学(University of Puget Sound)计算机科学专业的理学学士学位,克莱姆森大学(Clemson University)大学计算机科学专业的理学硕士学位,以及俄勒冈研究生学院科学技术管理专业硕士学位。
参考信息
相关链接