網(wǎng)上看到的 不知道是那個寫的
這篇文章主要是講述如何將已有的32位程序編譯成為64位程序, 并簡單講述如何遠程調(diào)試64位應(yīng)用程序, 以及在其中可能遇到的問題, 其中譯注補充部分為自已的實踐經(jīng)驗, 如有出入或其它解決方案, 歡迎指正.
本文一步一步地描述了怎樣使用Microsoft Visual Studio IDE創(chuàng)建64位應(yīng)用程序, 并且,64位的應(yīng)用程序代碼和32位應(yīng)用程序代碼完全一樣, 只是編譯環(huán)境配置有所不同,。目前還沒有發(fā)現(xiàn)有純64位的IDE應(yīng)用程序開發(fā)環(huán)境。筆者翻譯本文時,Microsoft已在VS.NET2002/2003/2005/2008 IDE中提供了64位創(chuàng)建環(huán)境 ,,但完全的64位IDE開發(fā)環(huán)境似乎還沒有。有興趣的朋友可以看下:
http://blogs./deeptanshuv/archive/2006/04/11/573795.aspx http://forums.msdn.microsoft.com/en-US/netfx64bit/threads/
當(dāng)前的軟件開發(fā)包(應(yīng)該是指Microsoft SDK 2003 server RC2)包括了專為64位應(yīng)用程序開發(fā)的編譯器,鏈接器, 和其它的工具. 同樣, 這個SDK包含了C運行時庫(CRT), 微軟基礎(chǔ)類庫(MFC), 和活動模板庫(ATL), 這些均是64位的產(chǎn)品版本. 你可以用Visual C++ 6.0 或者 Visual C++ .NET IDE創(chuàng)建64位的應(yīng)用程序。如果你有一個32位的應(yīng)用程序并且你想移植它到64位應(yīng)用程序, 這篇文章描述了怎樣在同一個工程中創(chuàng)建一個64位的 配置環(huán)境。
一些必要條件 這下面的列表描述了推薦的硬件, 軟件, 網(wǎng)絡(luò)以及Service pack: Microsoft 平臺 SDK (2001/11月) 或最近發(fā)布的Microsoft 平臺 SDK: 推薦使用2003 SDK RC2版本, 下載地址: http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part1.rar ...... http://download.microsoft.com/download/0/8/3/0839ce16-0523-4407-9432-01958ee61aff/VS2008TeamSuite90DayTrialCHSX1429243.part7.rar
Visual C++ 6.0 或者 Visual C++ .NET (2002 or 2003 or 2005 or 2008 )
用Visual C++ 6.0 IDE創(chuàng)建一個64位應(yīng)用程序
設(shè)置64位創(chuàng)建環(huán)境變量, 用下面任何一種方式都行: 方式一:
點擊”開始”菜單, 指向 “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. 變化當(dāng)前目錄到C:\Program Files\Microsoft SDK(你的SDK安裝目錄), 然后鍵入”SetEnv.bat /XP64”(沒有引號)
現(xiàn)在, 開始啟動Visual C++ 6.0并用我們剛才配置好的創(chuàng)建環(huán)境 1. 在同一個命令窗口中(也就是你剛才設(shè)置64位環(huán)境的命令行窗口), 打開Visual Studio.
2. 鍵入 “Msdev /useenv”(沒有引號). 請注意, 不要打開一個新的命令行窗口, 再去打開Msdev.exe, 現(xiàn)在Visual C++ 6.0 IDE已經(jīng)顯示, 并且include, library及executable目錄均被設(shè)置為64位的創(chuàng)建環(huán)境(注:查看這些配置, 點擊Tools > Options > Directories, 在”Show directories for: “下拉列表中查看相應(yīng)目錄配置). 另外, 如果Msdev.exe不在當(dāng)前路徑下(通常是系統(tǒng)環(huán)境變量沒有相應(yīng)指示), 變化目錄到你所安裝Visual Studio的目錄下, 例如: \Microsoft Visual Studio\Common\Msdev98\Bin, 然后, 再鍵入Msdev.exe.
譯注: 在前面的設(shè)置64位創(chuàng)建環(huán)境變量 , 已經(jīng)將IDE的executable執(zhí)行目錄調(diào)整到SDK的相應(yīng)目錄下面, 也就是說, 作為可執(zhí)行程序: 編譯器和鏈接器是在SDK目錄中, 而不再是默認(rèn)的\Microsoft Visual Studio\Common\Msdev98\Bin
添加一個64位Debug配置 1. 在Visual C++ IDE中, 打開一個已經(jīng)在的32位工程(例如: MyApplication)
2. 在”Build”菜單上, 點擊”Configurations”.
3. 在”Configurations”對話框上, 點擊”Add”.
4. 在”Add Project Configuration”對話框上, 設(shè)置”Configuration”到Debug64, 然后, 在”Copy Settings from”列表框中點擊”MyApplication – Win32 Debug”
5. 點擊”O(jiān)K”完成設(shè)置, 點擊”Close”關(guān)閉.
設(shè)置激活配置為64位 1. 在”Build”菜單上, 點擊”Set Active Configuration”.
2. 點擊”MyApplication – Win32 Debug64”, 然后, 點擊”O(jiān)K”.
修改編譯器和鏈接器的參數(shù)配置 由于64位的編譯器和鏈接器的參數(shù)配置和32位的有些不一樣, 我們需要修改部分選項, 下面是這些配置步驟: 1. 在”Project”菜單中,點擊”Settings”.
2. 在”Project Settings”對話框中, 點擊”General”標(biāo)簽. 在”O(jiān)utput directories”, 在”Intermediate files” 和”O(jiān)utput files”輸入框中, 鍵入”Debug64”(沒有引號)
3. 在”C/C++”標(biāo)簽上, 在”Debug info”下拉列表中, 選擇”Program database(參數(shù)選項對應(yīng)是 /Zi)
4. 在”Link”標(biāo)簽上, 在”Project options”的輸入框中, 變化”/machine:I386”(沒有引號)到”/machine:IA64”(沒有引號)
譯注: 正確設(shè)置應(yīng)是: /machine:AMD64
5. 在”View”菜單上, 點擊”Workspace”.
6. 然后, 移除幫助文件MyApplication.hpj
7. 如果你的應(yīng)用程序是基于MFC的, 你必須添加一個MFC路徑以避免鏈接錯誤:LNK1004 on the Mfc42d.lib, 請按下面步驟操作: a. 在”Tools”菜單上, 點擊”O(jiān)ptions”.
b. 在”Directories”標(biāo)簽上, 在”Show directories”下拉列表中, 選擇”Library Files”, 現(xiàn)在添加你的平臺庫所在路徑: ”\Microsoft SDK\lib\IA64\mfc”(沒有引號)
譯注補充: 在”C/C++”標(biāo)簽上, 在”Preprocessor definitions”輸入框中將WIN32改成WIN64 創(chuàng)建并調(diào)試這個工程 現(xiàn)在Build這個工程, 生成64位應(yīng)用程序, 這個應(yīng)用程序被部署在一個IA64計算機上. 要在Visual C++ 6.0中運行這個.exe文件, 按下面步驟: 注意: 你不能夠在Visual C++ 6.0 IDE中調(diào)試這個.exe文件. a. 在你的IA64計算機上, 創(chuàng)建一個文件夾: C:\VC6MSVCMON 從X86(32位)計算機上拷貝這些文件到這個新創(chuàng)建的文件夾中:
Msvcmon.exe Dm.dll Msdis110.dll Tln0t.dll
上面這些文件應(yīng)在你的Visual C++ 6.0安裝目錄下: \Visual Studio\Common\MSDev98\Bin
b. 在拷貝完這些文件后, 在IA64計算機上運行Msvcmon.exe, 然后, 點擊”Connect”.
c. 在X86(32位)計算機上, 打開Visual C++ 6.0 IDE, 在”Build”菜單上, 點擊”Debugger Remote Connection”.
d. 在”Remote Connection”對話框中, 點擊”Network TCP/IP”, 然后, 點擊”Settings”.
e. 在”Target computer name of address”輸入框中, 鍵入IA64計算機的名稱. 點擊”ok”兩次, 關(guān)閉對話框.
f. 在Visual Studio C++ IDE中, 在”Project”菜單上, 點擊”Settings”, 在左側(cè)面板, 展開”MyApplication”, 然后, 點擊”Debug”標(biāo)簽. 你將注意到”Executable for debug session”輸入框包含了MyApplication.exe的路徑, 看起來是C:\<X86Path>\MyApplication.exe.
g. 在”Remote executable path and file name”輸入框中, 鍵入”MyApplication.exe”(沒有雙引號)所在的全路徑, 這個路徑看起來像: \\<X86ComputerName>\C$\<x86Path>\MyApplication.exe(沒有引號).點擊”O(jiān)K”關(guān)閉該窗口.
h. 按下CTRL+F5或在”Build”菜單上點擊”Execute MyApplication.exe”, 開始運行這個.exe文件, 這個.exe文件現(xiàn)在是運行在IA64計算機上. 注意:如果MyApplication是一個MFC應(yīng)用程序并且這個工程用到了MFC相關(guān)的.dll文件, 請確信在IA64計算機上, 那些.dll文件從\Microsoft SDK\NoRedist\Win64文件夾中已被拷貝到\System32文件夾中. 譯注:\Microsoft SDK\NoRedist\Win64存放的是debug和release版本的MFC, ATL相關(guān)dll(64位), 實際上你也可以拷貝這些dll文件到你的可執(zhí)行.exe文件所在同一目錄中. 這些dll文件是:
Mfc42d.dll Mfco42d.dll Msvcrtd.dll
譯注補充: 編譯/鏈接中經(jīng)常遇到的問題:
鏈接出錯, 通常是RTC, cookie錯誤, 參見下面鏈接設(shè)置: http://support.microsoft.com/?scid=kb%3Ben-us%3B894573&x=15&y=14 鏈接中如出現(xiàn) Error Spawing bscmake.exe 去掉勾選編譯參數(shù)(Project settings > c/c++): Generate Browse Info 如果仍不成功, 請仔細(xì)檢查在菜單項”Tools” > “Options” , 定位在”Directories”標(biāo)簽, 選擇”Executable Files”, 在下面的目錄列表中, 將<SDK安裝目錄>\bin路徑放在第一項.(這個目錄中的64位編譯器和鏈接器程序?qū)⒅剌d舊的32位設(shè)置). 如果你是動態(tài)庫和主應(yīng)用程序鏈接, 必須保持用的是相同運行時庫, 例如: 全部都是Multi-Threads DLL(點擊”Project” > “Settings”, 選擇”C/C++”標(biāo)簽, 在”Category”下拉列表中選擇”Code Generation”, 在下面”Use runtime library”下拉列表中選擇). 用Visual C++ .NET IDE創(chuàng)建一個64位應(yīng)用程序 警告: 在已安裝Visual Studio .NET的計算機上, 請不要同時安裝64位版本的WinDbg調(diào)試器工具, 請讀平臺SDK的Readme.doc(位置在: C:\Program Files\Microsoft SDK\Bin\Win64\Readme.doc). 設(shè)置64位創(chuàng)建環(huán)境變量, 用下面任何一種方式都行: 參照前文相同部分. 開始啟動Visual C++ .NET, 并用剛才我們創(chuàng)建好的64位環(huán)境 1. 在64位SDK環(huán)境設(shè)置的命令行窗口中,打開Visual Studio .NET.
2. 鍵入”devenv /useenv”(沒有引號), 然后, 點擊”O(jiān)K”. 現(xiàn)在include, library, executable目錄被設(shè)置成為64位SDK所在目錄.
注意: 如果Devent.exe不在當(dāng)前路徑(通常是在系統(tǒng)環(huán)境變量Path中未指定Visual Studio .NET安裝目錄), 請改變文件夾路徑到<Visual Studio .NET安裝目錄>\Microsoft Visual Studio .NET\Common7\IDE, 然后再運行上述命令. 警告:在你運行這個命令后, Visual Studio .NET IDE就被設(shè)置成為64位的開發(fā)環(huán)境, 如果你想清除這個環(huán)境, 在打開一個新的Visual Studio .NET IDE之前, 刪除在C:\Documents and Settings\<Username>\Local Settings\Application Data\Microsoft\VisualStudio\7.0 下的Vccomponents.dat文件.
添加一個64位調(diào)試配置 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. 點擊”O(jiān)K”.
6. 在”Configuration Manager”對話框中, 在”Active Solution Configuration”列表中, 點擊選擇”Debug64”, 然后點擊”O(jiān)K”.
修改編譯器和鏈接器設(shè)置 由于64位的編譯器和鏈接器的參數(shù)配置和32位的有些不一樣, 我們需要修改部分選項, 下面是這些配置步驟:
1. 在”Solution”(中文:解決方案)瀏覽窗口中, 右鍵”Project”, 然后, 點擊”Properties”.
2. 在”C/C++”節(jié)點, 選擇”General”. 設(shè)置”Debug Information Format”到”Program Database”(對應(yīng)的編譯選項是/Zi).
3. 在”C/C++”節(jié)點中, 選擇”Code generation”. 設(shè)置”Buffer Security Check”到”No”(對應(yīng)的編譯選項是/GS).
4. 在”Linker”節(jié)點, 選擇”Command Line”.在”Additional Options”下面, 添加”/MACHINE:IA64”(沒有引號).
5. 如果你的應(yīng)用程序是基于MFC的,你必須添加MFC路徑以避免收到鏈接錯誤:LNK1104 on the Mfc42d.lib file. 添加MFC路徑, 按下面步驟: a. 在”Tools”菜單上, 點擊”O(jiān)ptions”.
b. 在”Projects”下面, 選擇”VC++ Directories”. 在”Show directories”列表中, 選擇”Library Files”.如果庫路徑?jīng)]有列出, 添加這個庫路徑"\Microsoft SDK\lib\IA64\mfc"(沒有引號). 注意:如果MyApplication是一個MFC應(yīng)用程序并且這個工程用到了MFC相關(guān)的.dll文件, 請確信在IA64計算機上, 那些.dll文件從\Microsoft SDK\NoRedist\Win64文件夾中已被拷貝到\System32文件夾中. 這些dll文件是: Mfc42d.dll Mfco42d.dll Msvcrtd.dll
完成這些后, 就可以build 64位可執(zhí)行程序了. 調(diào)試工程參照Visual C++ 6.0 IDE部分.
|