分类:
2010-08-03 18:02:39
原文
这篇文章主要是讲述如何将已有的32位程序编译成为64位程序, 并简单讲述如何远程调试64位应用程序, 以及在其中可能遇到的问题, 其中译注补充部分为自已的实践经验, 如有出入或其它解决方案, 欢迎指正.
本文一步一步地描述了怎样使用Microsoft Visual Studio IDE创建64位应用程序, 并且,64位的应用程序代码和32位应用程序代码完全一样, 只是编译环境配置有所不同。目前还没有发现有纯64位的IDE应用程序开发环境。笔者翻译本文时,Microsoft已在VS.NET2002/2003/2005/2008 IDE中提供了64位创建环境 ,但完全的64位IDE开发环境似乎还没有。有兴趣的朋友可以看下:
http://blogs.msdn.com/deeptanshuv/archive/2006/04/11/573795.aspx
当前的软件开发包(应该是指Microsoft SDK 2003 server RC2)包括了专为64位应用程序开发的编译器,链接器, 和其它的工具. 同样, 这个SDK包含了C运行时库(CRT), 微软基础类库(MFC), 和活动模板库(ATL), 这些均是64位的产品版本. 你可以用Visual C++ 6.0 或者 Visual C++ .NET IDE创建64位的应用程序。如果你有一个32位的应用程序并且你想移植它到64位应用程序, 这篇文章描述了怎样在同一个工程中创建一个64位的 配置环境。
......
Visual C++ 6.0 或者 Visual C++ .NET (2002 or 2003 or 2005 or 2008 )
用Visual C++ 6.0 IDE创建一个64位应用程序
方式一:
点击”开始”菜单, 指向 “Microsoft Platform SDK” > “Open Build Environment Windows” > “Set Windows XP 64 Build Environment”, 然后点击”Set Windows XP 64 Build Environment (Debug)”, 这时, 一个控制台窗口将显示, 一行文本显示像” the build environment set for a 64-bit”.
方式二:在命令提示符下,
1. 点击”开始”菜单, 然后点击”运行”
2. 键入”command.exe”(没有引号), 然后, 点击”确定”
3. 变化当前目录到C:\Program Files\Microsoft SDK(你的SDK安装目录), 然后键入”SetEnv.bat /XP64”(没有引号)
1. 在同一个命令窗口中(也就是你刚才设置64位环境的命令行窗口), 打开Visual Studio.
2. 键入 “Msdev /useenv”(没有引号). 请注意, 不要打开一个新的命令行窗口, 再去打开Msdev.exe, 现在Visual C++ 6.0 IDE已经显示, 并且include, library及executable目录均被设置为64位的创建环境(注:查看这些配置, 点击Tools > Options > Directories, 在”Show directories for: “下拉列表中查看相应目录配置).
另外, 如果Msdev.exe不在当前路径下(通常是系统环境变量没有相应指示), 变化目录到你所安装Visual Studio的目录下, 例如: \Microsoft Visual Studio\Common\Msdev98\Bin, 然后, 再键入Msdev.exe.
译注: 在前面的设置64位创建环境变量 , 已经将IDE的executable执行目录调整到SDK的相应目录下面, 也就是说, 作为可执行程序: 编译器和链接器是在SDK目录中, 而不再是默认的\Microsoft Visual Studio\Common\Msdev98\Bin
译注补充: 编译/链接中经常遇到的问题:
1. 在64位SDK环境设置的命令行窗口中,打开Visual Studio .NET. 1. 在”Solution”(中文:解决方案)浏览窗口中, 右键”Project”, 然后, 点击”Properties”. 完成这些后, 就可以build 64位可执行程序了. 更多参考在:
2. 键入”devenv /useenv”(没有引号), 然后, 点击”OK”. 现在include, library, executable目录被设置成为64位SDK所在目录.
注意: 如果Devent.exe不在当前路径(通常是在系统环境变量Path中未指定Visual Studio .NET安装目录), 请改变文件夹路径到
警告:在你运行这个命令后, Visual Studio .NET IDE就被设置成为64位的开发环境, 如果你想清除这个环境, 在打开一个新的Visual Studio .NET IDE之前, 删除在C:\Documents and Settings\添加一个64位调试配置
1. 打开一个已存在的32位工程(例如, MyApplication).
2. 在”Build”菜单上, 点击”Configuration Manager”.
3. 在”Active Solution Configurations”列表中, 点击”New”.
4. 在”New Solution Configurations”对话框中, 在”Solution Configuration Name”下面选择”Debug64”(不包含引号), 并且在”Copy Settings From”下面选择”Debug”.
5. 点击”OK”.
6. 在”Configuration Manager”对话框中, 在”Active Solution Configuration”列表中, 点击选择”Debug64”, 然后点击”OK”.
修改编译器和链接器设置
由于64位的编译器和链接器的参数配置和32位的有些不一样, 我们需要修改部分选项, 下面是这些配置步骤:
2. 在”C/C++”节点, 选择”General”. 设置”Debug Information Format”到”Program Database”(对应的编译选项是/Zi).
3. 在”C/C++”节点中, 选择”Code generation”. 设置”Buffer Security Check”到”No”(对应的编译选项是/GS).
4. 在”Linker”节点, 选择”Command Line”.在”Additional Options”下面, 添加”/MACHINE:IA64”(没有引号).
5. 如果你的应用程序是基于MFC的,你必须添加MFC路径以避免收到链接错误:LNK1104 on the Mfc42d.lib file.
添加MFC路径, 按下面步骤:
a. 在”Tools”菜单上, 点击”Options”.
b. 在”Projects”下面, 选择”VC++ Directories”. 在”Show directories”列表中, 选择”Library Files”.如果库路径没有列出, 添加这个库路径"\Microsoft SDK\lib\IA64\mfc"(没有引号).
注意:如果MyApplication是一个MFC应用程序并且这个工程用到了MFC相关的.dll文件, 请确信在IA64计算机上, 那些.dll文件从\Microsoft SDK\NoRedist\Win64文件夹中已被拷贝到\System32文件夹中.
这些dll文件是:
Mfc42d.dll
Mfco42d.dll
Msvcrtd.dll
调试工程参照Visual C++ 6.0 IDE部分.