2011-07-14 118 views
2

我正在使用32位環境。我有一個包含一組C#項目和一組VC++非託管項目的解決方案。對於所有C#項目構建平臺已被設置爲「任何CPU」,對於VC++項目,它是Win32。我們正在遷移到64位平臺。 現在我的問題是將32位非託管VC++項目轉換爲64位

1)我可以將我的32位VC++ Dll轉換爲64位在我的32位環境

2)是否有方法可以將VC++項目的平臺設置爲「任何CPU」?

3)我在VS2008的Build菜單下打開了配置管理器。將主動解決方案平臺設置爲任何CPU(,我沒有改變它以前設置爲這個平臺只有),然後我把VC++項目的平臺設置爲X64。現在我清理了解決方案並嘗試重新構建解決方案。 VC++項目沒有建立,因此也沒有構建引用VC++項目的C#項目。我試着獨立建設VC++項目,我得到這個錯誤:「致命錯誤LNK1112:模塊機器類型X86與目標機器類型x64衝突

任何意見和建議,非常感謝!

感謝, Keerti Somasundaram

+3

如果您沒有要測試的64位機器,請不要嘗試移植到64位。 – bdonlan

回答

7

將我的32位VC++的dll轉換爲64位在我的32位環境?

你當然可以使用32位系統編譯爲64位系統的代碼,如果你有可用的64位編譯器(Visual Studio中的某些版本的某些版本不包含64位編譯器等等)。由於您可以將目標平臺設置爲x64並編譯您的代碼,因此聽起來您可以使用編譯器。

如果您在32位系統上編譯,測試和調試將會更加困難。顯然你必須在x64系統上運行你的測試,所以現在你不得不使用遠程調試器。

是否有辦法讓我可以爲VC++項目設置平臺 也可以像「任何CPU」一樣?

這對於本地C++來說並不合適。一個本地代碼DLL絕對是一個32位或64位的代碼文件。託管代碼可以支持「任何CPU」,因爲JIT負責將IL編譯爲實際的平臺操作代碼,因此它可以根據需要轉換爲x86或x64。

的VC++項目並沒有獲得建造

使用生成菜單的配置管理命令來檢查您的構建配置。您可能會發現該配置有一個用於x64平臺的VC++ Dll項目的條目,但未選中Build複選框。

致命錯誤LNK1112:與目標 機型的x64模塊機型X86衝突

鏈接器會提醒您爲鏈接文件的目標是64位(這是你想要的),但輸入到鏈接器的模塊(文件)是爲x86構建的,因此它與該目標發生衝突。你做什麼來解決這個問題取決於模塊是什麼。

如果你通過編譯你的項目的cpp文件創建的obj文件得到這個錯誤,那麼問題是你的項目正在爲x86而不是x64編譯該cpp文件。

更可能是因爲鏈接到項目的LIB文件(或其他文件)而出現此錯誤 - 例如來自某個SDK的LIB文件。在這種情況下,修復程序可能會更改項目屬性,以便使用正確的(即x64)LIB文件。一些SDK爲32位和64位版本的LIB文件使用不同的文件名。其他人爲LIB文件使用相同的名稱,但將x86和x64版本存儲在不同的目錄中。

一個開始尋找的好地方是Project |屬性|鏈接。在常規選項卡上有一個「其他庫目錄」字段。那裏的任何條目都應該指向x86和x64平臺的不同目錄(除非使用特定的目錄來保存x86和x64文件)。在Input選項卡上有一個「Additional Dependencies」字段。那裏的任何條目都應該對所有平臺都是相同的(除非使用不同的文件名來區分x86和x64文件)。

另一個需要檢查的地方是Tools |選項|項目和解決方案| VC++目錄。這些設置列出了搜索特定類型文件的各種目錄。每個平臺都有單獨的列表。在你的情況下,你想要檢查「庫文件」列表。對於x64平臺,您希望確保「庫文件」列出包含x64版本庫文件的指定目錄。

3

對於自己解決這個問題,我發現以下鏈接非常有用。

http://msdn.microsoft.com/en-us/library/9yb4317s.aspx

對於我來說,我嘗試在32位VC++ VS2010應用程序轉換成64位應用程序。

如沒有指定缺省的x86

致命錯誤lnk1112模塊機器類型 '86' 與衝突

鏈路警告lnk4068 /機我正在錯誤目標 機器類型'x64'

我遵循各種其他網站的建議,但需要有關目標/ MACHINE設置的信息。

對於我來說,設置該工作一種享受:

項目設置\配置屬性\圖書館\一般\目標計算機

舊值:空(默認爲86) 新價值:MachineX64(/ MACHINE:X64)

希望這可以幫助別人。