2012-01-10 57 views
1

我使用Visual Studio 2010 Premium。我有兩個項目A和B,我試圖編譯到64位平臺。
項目A輸出項目B依賴的.dll和.lib文件。
我已經成功編譯項目A到64位平臺,但是當我編譯項目BI收到以下錯誤:致命錯誤LNK1112:模塊機器類型'X86'與目標機器類型'x64'衝突

mfcs100d.lib(nolib.obj):致命錯誤LNK1112:模塊機型「X86 '與目標機器類型衝突'x64'

可能是什麼問題?我真的不知道這個mfcs100d.lib文件是什麼。
我已經在項目A的dll文件上使用了「Dependency Walker」,它似乎完全依賴於64位dll文件。 此外,我去了項目B的(屬性頁面 - >配置屬性 - >鏈接器 - >高級),並確認'Target Machine'設置爲「MachineX64」。 另外,在配置管理器上,平臺設置爲x64。

有人infromed我的問題可能是這樣的:

去項目B的(屬性頁 - >配置屬性 - > C^\ C++ - >預處理器 - >預處理定義),我有以下的值有:

WIN32 
_DEBUG 
_WINDOWS 
_AFXEXT 

那真的有關係嗎?我應該替換'WIN32'值嗎?如果是的話,那麼如何?我不太瞭解這些定義的含義以及如何改變它們。

編輯:我只是意識到,可能它根本就沒有關係。這些只是預處理器的定義,比如可以由C++ #define命令確定的定義。但我可能是錯的。

+0

不要擺脫WIN32,即使編譯64位代碼,它仍然是Win32 API,所以你需要定義WIN32。 – jcopenha 2012-01-10 14:09:08

回答

5

很難得到這個錯誤。從Build + Configuration Manager開始,並仔細檢查是否爲這兩個項目選擇了x64。下一步是驗證庫搜索路徑。右鍵單擊項目,屬性,VC++目錄,庫目錄。點擊組合框箭頭查看「繼承的值」。 $(VCInstallDir)atlmfc \ lib \ amd64應該是列表中的第二個,這是64位版本的mfcs100d.lib所在的位置。

+0

列表中的第一個值是$(VCInstallDir)bin \ x86_amd64 第二個是$(VCInstallDir)bin。 如何將第一個值更改爲$(VCInstallDir)atlmfc \ lib \ amd64?看來我不能重寫這個迭代,並添加一個新的項目導致了一個錯誤。 – 2012-01-10 13:35:55

+0

您正在查看錯誤的設置,請查看*庫目錄*,而不是可執行目錄。 – 2012-01-10 13:38:05

+0

噢,對不起。 是的,值$(VCInstallDir)atlmfc \ lib \ amd64確實寫在那裏,所以我想知道自己是什麼問題。 – 2012-01-10 13:40:39

2

當您添加x64目標時,進入常規設置並查看輸出目錄和中間目錄。調試目標從「調試」更改爲「Debug64」,對於發佈目標也是如此。

+0

你能爲此添加一個屏幕截圖嗎? – 2013-11-22 19:27:01

相關問題