2015-04-01 126 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位代码没有简单的方法,反之亦然。