在超便携式设备中使用英特尔® C++ 编译器

发布日期: 2007年4月5日 | 最后修改日期: 2008年8月22日
介绍
作者:技术咨询工程师 Bernth Andersson 和 Max Domeika

超移动设备 (UMPC) 的优点之一是,与面向笔记本和台式机市场的现有软件之间具有很高的兼容性。此外,由于针对 UMPC 的应用要求具备高性能,因而推动了高性能 C++ 编译器的使用。本文向您说明如何使用英特尔® C++ 编译器 9.1 Windows* 版来编译运行在 UMPC 设备上的程序。

定义
  • 本文在菜单选项两侧放置“<”和“>”。例如,如果说明中指定您依次选择 <文件> <新建> <项目>,则表明您需要单击屏幕上的“文件”菜单,然后单击“新建”选项,再选择“项目”。
  • SSE3 – SIMD 流指令扩展 3 是较新的几代 IA-32 架构中支持的指令集,可以提供高性能浮点和预取功能。
要求
假定您可以访问 UMPC 设备。文本所有示例中均使用 Samsung Q1 UMPCi。该设备的高级功能部件如下:

  • 英特尔® 赛扬® 处理器,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”
  1. 打开 Microsoft Visual Studio,依次选择 <文件> <新建> <项目>。然后选择一个 Win32 应用程序,为项目指定一个名称。图 1 显示了使用项目名 UMPC_remote_test 的一个示例。您可能希望将位置更改为自己的测试目录。一切就绪后,请单击“确定”。



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



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



  4. 传输到 UMPC 设备。可通过 LAN 将示例应用程序传输到 UMPC 设备。其方法是与笔记本共享 Samsung Q1 上的 C 盘驱动器。您也可以选择使用远程桌面。
  5. 在 UMPC 设备上运行该应用程序。使用 UMPC 笔针双击 exe 文件启动程序。单击菜单项 <帮助>  
    <关于> 时将显示如图 4 所示的对话框。

采用独特 UMPC 功能的应用程序
第一个示例(“Hello World”)不使用 Samsung Q1 设备或英特尔® C++ 编译器中的任何特定功能。Microsoft Tablet PC 平台 SDK 包含若干样例程序,介绍 UMPC 上提供的特定功能(例如手写识别)的使用。

  1. 生成 TPCInfo 程序。打开 Microsoft Tablet PC 平台 SDK 中的“样例与源代码”部分。然后单击“打开项目”按钮,选择 TPCInfo 程序。图 5 显示了样例屏幕快照。此时 Visual Studio 将打开一个普通的 C++ 项目。不需要对此项目进行任何更改,按 F7 键生成项目。


  2. 传输到 UMPC 设备。使用 LAN 连接将 exe 文件传输到 UMPC 设备。您将使用 UMPC 和笔记本电脑之间的共享文件夹。然后进行复制和粘贴操作或将 exe 文件拖放到 UMPC 上。
  3. 运行该应用程序。双击 UMPC 设备上的 exe 文件,此时显示如图 6 所示的窗口。


  4. 在笔记本电脑上运行该应用程序,您将看到类似于图 7 中所示的一个对话框。程序正确地指出笔记本电脑上未安装任何手写软件。


采用编译器运行时库的应用程序
英特尔® C++ 编译器可以生成使用编译器的动态运行时库的可执行文件。UMPC 设备上需要提供这些库从而确保生成的可执行文件正确运行。例如,图 8 显示了计算 pi 值的控制台应用程序。借助英特尔® C++ 编译器中的 OpenMP* 功能,程序中的主循环被并行化。#pragma omp 添加在代码中 for-loop 的前面。



  1. 生成应用程序:在 Visual Studio 中打开一个新项目。然后在项目窗口中选择“Win32 控制台应用程序”,在控制台应用程序窗口中选择“简单应用程序”。现在应该打开了一个如图 9 所示的几乎为空的项目。在该控制台应用程序中添加计算 pi 的代码。一切就绪后,按 F7 键,然后更正所有错误。在开始链接阶段之前,会显示类似图 10 的一个关于“#pragma omp”的注释。该注释表明编译器确实在管理指定循环的并行处理。您现在应该已拥有一个 exe 文件。



  2. 将应用程序传输到 UMPC 设备:使用 LAN 连接将 exe 文件传输到 UMPC 设备。您将使用 UMPC 和笔记本电脑之间的共享文件夹。然后进行复制和粘贴操作或将 exe 文件拖放到 UMPC 上。
  3. 运行应用程序:双击 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 设备上正确执行。请参考下表:

指令 编译器选项 注释
SSE3 -QxP, -fast 如果处理器执行它不支持的指令,则会发生运行时异常,应用程序将终止。
在 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)大学计算机科学专业的理学硕士学位,以及俄勒冈研究生学院科学技术管理专业硕士学位。

参考信息
相关链接
我们邀请您在本页 发表评论 (不受客服控制),或直接向我们的支持中心 提问.