一、了解64位系统
关于64位系统有很多术语,包括x64,IA-64,Intel 64,
AMD64等等。花时间了解了一点其中的差异。根据兼容性大致可以分为两类IA-64和Intel 64。
IA-64:或者说叫
Itanium(安腾)系列,是Intel和HP公司开发的一个64位体系架构,主要用于服务器市场,与x86体系不兼容。
Intel 64:包括EM64T / AMD64 / x86-64 / x64等,它是对x86体系架构的扩展,并向后兼容。由于名称很多,所以很容易混淆。具体了解可参见
WIKI。
要想了解64位C++编程,请看
这里。
二、编译第一个64位程序
近期将个人电脑升级到Win7系统,编译器也换成了Visual Studio 2010。有一个Project需要用到zlib库。于是从
http://www.zlib.net/下载了一份最新的zlib1.2.7
但是在编译64位动态库时却出错了。
![](/images/cppblog_com/huyutian/QQ截图20121005165719.png)
根据我的分析,应该与
PreBuildEvent预处理环境有关。因为我在win32环境下编译就没有问题。为啥在x64环境下PreBuildEvent找不到"..\..\contrib\masmx64"路径呢?那么到底在执行PreBuildEvent操作时,当前的目录是哪里了?查了半天资料没找到,在郁闷的时候我想到了一个办法。嘿嘿,关键时候还得靠自己啊。PreBuildEvent操作时执行的其实是一个多行的批处理命令(当然是支持宏替换的)。我直接在PreBuildEvent批命令中加入了一行
![](/images/cppblog_com/huyutian/QQ截图20121005170814.png)
运行结果是
![](/images/cppblog_com/huyutian/QQ截图20121005171002.png)
可以看出,X64 PreBuildEvent执行时的当前目录是"D:\Projects\zlib-1.2.7\contrib\vstudio\vc10",检查一下zlib的目录结构,所以将"cd ..\..\contrib\masmx64"这一行修改为"cd ..\..\masmx64"就ok了。