64bit 开发环境

      64bit 开发环境
 
写过程序的人都知道,要进行编程,首先要有一个"编写"代码的环境,从理论上来说,记事本也可以完成编写代码的任务,但一个带有语法着色、智能感知输入的集成开发环境(IDE),往往会令我们事半功倍,以下主要以Microsoft Visual C++ 2005 Express Edition和最新的Platform SDK为例进行讲解,分别在Visual C++ 2005 Express Edition中编写代码,用Platform SDK编译;这两个软件均为免费软件,可从微软的官方网站下载使用,这样大家都可以有机会亲自动手尝试64位编程。

  可能有人会问,那必须要在一个64位平台上开发吗?答案是不一定,Platform SDK提供了跨平台交叉编译功能,就是说,可以在32位系统平台上编译生成程序,而到64位平台上去运行,考虑到普遍情况,本文以32位平台为基础,来进行64位编程。

  安装Visual C++ 2005 Express Edition和Platform SDK

  Visual C++ 2005是微软今年底推出的Visual Studio.NET 2005中的一个组件,其Express Edition可看作是个人版,可从微软的官方网站免费下载,无时间使用限制。在安装之前,程序会要求先安装Microsoft .NET Framework Version 2.0 Redistributable Package (x86)。安装程序是基于网络的,安装时会下载所必须的文件;如下图所示,可看到有图形IDE、Microsoft MSDN 2005 Express Edition、Microsoft SQL Server 2005 Express Edition x86三个安装可选项,此处只选项安装了图形IDE。


  以下显示了安装过程:


  安装完后的程序主界面如下图所示,


  与前任相比,Visual C++ 2005开始页中最明显的一项变化是,可以实时显示有关Visual C++开发者的新闻信息。图中可见有一菜单项为"Community"(社区),下拉菜单之后有提问、检索等等功能,可见Visual C++ 2005更加重视协作功能,可通过互联网充分利用开发者社区中的资源。

  有了Visual C++ 2005 Express Edition,还不能进行64位程序的开发,此时的Visual C++只能生成32位的控制台程序,不过没关系,我们只把它当作一个编写及编译代码的高效工具,要生成64位本地代码,还要安装Platform SDK。

  Microsoft Windows Platform SDK提供了文档、示例程序、头文件、库和相应工具,可用作开发Windows下的应用程序,开发出的程序可运行在基于x86、x64和IA64(安腾)处理器的Windows Server 2003 SP1、Windows XP SP2、Windows XP x64 Pro Edition和Windows 2000之上;同时,Platform SDK微软提供免费下载。如果要开发64位 .NET程序,还必须安装 .NET Framework 2.0 Software Development Kit (SDK) (x86)。

  在Platform SDK的安装过程中,可依据个人开发的需要选择所需安装的项目:


  同时,在每一个项目下,都有针对不同64位平台的工具和代码生成环境设置,如下图所示:


  以笔者电脑安装的Microsoft Platform SDK for Windows Server 2003 SP1为例,在Windows开始菜单中,可见有Windows 2000、Windows Server 2003 32位和64位、Windows XP 32位和64位,这五项代码生成环境设置,每个项目下还有调试版(Debug)和零售版(Retail--对应于以前的发布版Release)等子项目。点击相应的菜单项,批处理文件会设置好合适的库和头文件目录,并打开一个命令提示符窗口,在此窗口中,可调用合适的编译器和链接器,同时,此Platform SDK中还带有一个调试器WinDbg,可用于调试程序。


  下表显示了Platform SDK安装之后的文件目录结构

目录 内容
/Bin Platform SDK工具
/Bin/Win64 用于生成基于安腾(Itanium)架构应用程序的工具,包括一个x86-IA64的跨平台交叉编译器
/Bin/Win64/AMD64 用于生成基于x64架构应用程序的工具
/Bin/Win64/ia64 用于生成基于安腾(Itanium)架构应用程序的工具
/Bin/Win64/x86/AMD64 用于生成基于x64架构应用程序的工具,包括一个x86-AMD64的跨平台交叉编译器
/Help Platform SDK文档
/Include 头文件和IDL文件,包含ATL、CRT、MFC
/Lib 输入库和TLB文件
/Lib/ia64 支持基于安腾(Itanium)架构的输入库和TLB文件
/Lib/AMD64 支持AMD64架构的输入库和TLB文件
/License Platform SDK许可信息
/NoRedist/Win64 支持安腾(Itanium)架构的DLL和PDB文件,不可再发布
/NoRedist/Win64/AMD64 支持AMD64架构的DLL和PDB文件,不可再发布
/Redist/Win64 支持安腾(Itanium)架构的DLL文件
/Redist/Win64/AMD64 支持AMD64架构的DLL文件
/Samples Platform SDK开发示例
/Src 支持64位开发的ATL、CRT、 MFC源代码

   编译器简介

  Platform SDK中的编译器是微软公司提供的跨平台交叉编译器,可运行在基于x86或x64处理器的Windows XP和Windows Server 2003之上,并支持WoW64仿真层,提供跨平台交叉编译功能:


  此编译器跟随Platform SDK一同发布,与Visual Studio中的Visual C++编译器有所不同,下面列出了五点差异,以便大家清楚地区分。

  ·此PSDK C++编译器不能用于Visual Studio的集成开发环境之中,只能用于命令行编译。

  ·此PSDK C++编译器不支持CLR代码生成。完全支持64位平台CLR代码生成的编译器是Visual Studio.NET 2005中的Visual C++编译器。

  ·此PSDK C++编译器可运行在Win64或Win32系统的电脑上。

  ·此PSDK C++编译器支持6.0版本的MFC/ATL、STL、CRT。如果想使用Visual Studio 2003中的MFC/ATL、STL、CRT,请联系libs7164@microsoft.com,以获取这些库。

  ·此PSDK C++编译器带有一些不同的编译器选项(参见下文)。

  因为此处编译器和链接器的大多数选项都与Visual Studio x86 32位版本上的相同,在此主要描述不同之处:

  编译器选项

选项 动作
/fp:fast 生成最快速度的浮点代码,不能与其他任何/fp:<option>一同使用。
/fp:precise 生成与IEEE兼容并优化过的浮点代码,不能同时使用/fp:fast或/fp:strict,但/fp:except除外。
/fp:strict 生成保守的浮点代码,隐含/fp:except。不能同时使用/fp:fast或/fp:precise,但/fp:except- 除外。
/fp:except[-] 打开或关闭可靠浮点例外。不能同时使用/fp:fast。
/homeparams 强制所有的参数写入堆栈,包括那些通过寄存器传递的参数。
/errorReport:<prompt|send|none> 此选项通过内部编译器错误(ICE)机制设置编译器的错误报告行为。prompt - 通过ICE,提示用户发送一个错误报告给微软。send - 通过ICE,一个错误报告直接发送给微软。none - 不发送错误报告给微软。
/RTC1 /RTCc /RTCs /RTCu Platform SDK不支持运行时检查。如果需要此项功能,请使用Visual Studio 2005中的编译器和库。

  链接器选项

选项 动作
loosefpmath.obj 使用此选项将会为浮点计算打开FTZ(flush-to-zero)和DAZ(denormals-as-zero)。默认情况下,是不使用此选项,并且FTZ(flush-to-zero)和DAZ(denormals-as-zero)是关闭的。

  需注意的事项

  ·iostream不支持__int64:

  要避免如下形式的代码

#include <iostream.h>
__int64 i64;
void main( )
{
cout << i64;
}

  ·在基于AMD64和x64的编译器上,已不支持_asm。

  下面,我们以一个经典的"Hello world"程序来演示如果在32位平台上,开发64位应用程序。

  打开Microsoft Visual C++ 2005 Express Edition,在"文件(File)"菜单中,选取"新建(New)"à"工程(Project)",在打开的对话框左边窗体中,选择工程类型为"Win32"(我们此处不是真的要生成一个Win32类型的程序,而是利用这个自动化过程而已,最终程序为x64类型),输入工程名,点击"下一步(Next)" à在此不勾选"使用预编译头precompiled header"à"完成(Finish)",此时可看到已生成一个工程,修改代码如下:

#include <iostream>
using namespace std;

int main(int argc, char * argv[])
{
cout << "Hello World!" << endl;
return 0;
}

   在命令提示符窗口中构建

  点击"开始à所有程序àMicrosoft Platform SDKàOpen Build EnvironmentàWindows XP 64-bit Build EnvironmentàSet Windows XP x64 Build Environment (Retail)",此时可打开一个命令提示符窗口,已设置为Windows XP x64应用程序生成环境,在此窗口下生成的程序可运行在Windows XP x64 Edition上。如果要调用编译器,键入cl.exe,要调用链接器,键入link.exe。键入cl/?、link/? 查看详细信息。
假设前段示例代码的文件名为:first64.cpp,存放在D盘根目录下。

  在命令提示符窗口中键入:cl d:/first64.cpp bufferoverflowU.lib /EHsc,回车。

  此处解释一下为什么这样调用编译命令,默认情况下,cl在编译完成之后会自动调用link,命令行中带上/EHsc是为了打开"C++例外(Exceptions)",以免出现编译器警告;微软的编译器从Visual Studio.NET 2002开始,默认设置了一个编译选项/GS,其作用是堆栈检查,以防止堆栈或缓冲区溢出此类问题的发生,即是阻止代码溢出攻击,所以必须链接bufferoverflowU.lib库。其详细情况如下:

  ·bufferoverflowU.lib:此函数库具体实现安全性 cookie 验证功能,此功能可以在用户模式中使用,也可以在使用 Win32 API 的应用程序中使用。大多数应用程序将链接到这个函数库。

  ·bufferoverflowK.lib:此函数库具体实现在操作系统内核模式中执行的安全性 cookie 检查。在内核模式中运行的服务与子系统应该链接到这个库。

  ·bufferoverflow.lib:此函数库具体实现可以在用户模式中使用的安全性 cookie 验证功能。不过它与 bufferoverflowU.lib 有所不同,它可以在不使用 Win32 API 的服务与应用程序中使用。

   在集成开发环境中(IDE)构建

  首先,点击"开始à所有程序àMicrosoft Platform SDKàOpen Build EnvironmentàWindows XP 64-bit Build EnvironmentàSet Windows XP x64 Build Environment (Retail)",它会自动设置好path、include、lib环境变量。

  修改开始菜单中Visual C++ 2005 Express Edition的快捷方式,加上启动参数/useenv,如下"C:/Program Files/Microsoft Visual Studio 8/Common7/IDE/VCExpress.exe" /useenv。

  此时启动Visual C++ 2005 Express Edition的集成开发环境(IDE),加载前面所创建的工程,选择"Build"à"Configuration Manager",在Active solution configrration栏中选择New…


  在此时弹出的对话框name中输入x64 Retail,在copy setting from中选择Release,此处的两项可根据你所想要生成的工程性质,自由选择;之所以这样做的目的,是为了方便在名称上区分32位与64位工程,同时也不会影响到原有工程的设置。


  在编译生成工程之前,还需做如下设置:

  1、 点击菜单"Project"à"Properties",打开"Configuration Properties" à"C++" à"General",确定"Detect 64-bit Portability Issues:"为"Yes(/Wp64)",以保证编译器检查工程的64位可移植性问题。

  2、 打开"Configuration Properties" à"Linker" à"Input",在第一行"Additional Dependencies:"中加入bufferoverflowU.lib库。

  3、 打开"Configuration Properties" à"Linker" à"Advanced",把"Target Machine"改为"Not Set";接下来点击左边的"Command Line",在"Additional options:"栏中加入"/MACHINE:AMD64"。

  点击"确定"退出,接下来就可以生成工程了;如果生成过程中,提示找不到cl.exe、头文件、库等等之类的信息,可在菜单"Tools"à"Options…"à"Projects and Solutions"à"VC++ Directories"中检查有关目录是否设置正确,构建工程所需的全部相关文件都位于"C:/Program Files/Microsoft Platform SDK"下。这属于集成开发环境(IDE)的使用设置问题,不少文章都有介绍,此处不再赘述。

  现在,你也可以编写64位应用程序了,是不是很简单呢;Visual C++ 2005与Platform SDK已经为64位编程做好了准备,你呢?
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值