2015-04-01 134 views
0

我有一個32位目標文件o.obj,並且希望在使用64位庫l.lib的項目中使用它。64位項目中的32位.obj

爲了使.lib開心,Visual Studio配置需要設置爲x64。但是,鏈接器會引發一個錯誤error LNK1112: module machine type 'X86' conflicts with target machine type 'x64'

我經歷了Visual Studio的鏈接器選項,但沒有跳出。有沒有辦法解決這個錯誤?

我的印象是任何32位代碼也與64位系統模數庫兼容。

+1

爲什麼要在x64項目中使用32位對象?錯誤是*非常*清晰 - 您不能混合來自不同機器類型的對象。這不是讓VS高興或找到解決方法的問題 - 至少指針和類型具有不同的大小。 – 2015-04-01 13:44:54

+0

我正在使用一些x86的軟件。我希望能夠直接在我的代碼中使用它,但我想通過重建庫來回避這個問題。 – al92 2015-04-01 13:51:06

回答

1

通過處理器和操作系統共同支持的特殊兼容模式,可以在運行64位操作系統的x64機器上執行x86可執行文件(即,爲32位x86處理器編譯的目標代碼)。這是可行的,因爲x86指令集是x64指令集的子集。

但是,ABI的許多元素在x86和x64代碼之間不同,特別是調用約定和指針大小。調用約定需要在調用代碼和被調用代碼之間進行匹配,否則事情就會搞砸。因此,從32位代碼調用64位代碼沒有簡單的方法,反之亦然。