編譯平臺與目標平臺不一致帶來的麻煩
今天VS2010編的EXE在XP上顯示不是有效的win32應用程式,為此,我們需要編寫出對環境依賴小的,能到處跑的程式;
一、X86,即一般普通PC上跑的程式版本,不用修改工程屬性
二、X64
1、設定工程平臺---會在工程目錄下生成 X64 資料夾
在工具欄--->生成--->配置管理器 視窗
設定“活動解決方案平臺”和“平臺” 為X64,“平臺”那裡沒有X64,就點選新建。
2、選擇目標機器平臺
在工具欄--->專案--->xx屬性 視窗
選擇 “配置屬性”--->"連結器"--->"高階"--->"目標計算機"--->"MachineX64"
三、DLL依賴問題
1、取消依賴CLR
選擇 “配置屬性”--->"C/C++"--->"公共語言執行時支援" 設定為無
2、設定MFC庫連線方式
“配置屬性”--->"常規"--->"MFC使用"
設定為 “使用標準windows庫“ 或 ”在靜態庫中使用MFC“
3、設定程式碼生成執行庫
“配置屬性”--->"C/C++"--->"程式碼生成"
設定 ”執行庫” 為 "多執行緒/MT"
附上CSDN論壇上的一個版主的說明:
1. 確定用的是32位編譯器
2. 確定不使用/clr選項:這將依賴.NET
3. 確定使用/MT靜態連結CRT
這樣編譯出來的程式自然可以到處跑。
四、可能出現的情況
1、X64下工程平臺和機器目標平臺不一致報錯
五、備註
1、活動解決方案平臺,這個和目標程式執行沒什麼關係,應該不用設定。
驗證 “活動解決方案平臺” 為X64 , 專案平臺設定為“WIN32”,在X86 xp下還是能執行,生成程式的目錄在Release下,而不是X64/Release
2、專案平臺改變,目標平臺也會改變
驗證 “目標計算機” 設定為“MachineX64” , 切換工程平臺為WIN32時,檢視 “目標計算機” 設定已變成 “MachineX86”
3、X86執行X64編譯出來的程式報錯資訊如下: