致命错误LNK1112:模块机器类型'X86'与目标机器类型'AMD64'冲突

时间:2010-04-01 09:23:16

标签: visual-c++ configuration compiler-errors project-files

我在32位XP操作系统上使用VS 2003 .Net。我还在我的机器上安装了“Microsoft Platform SDK”。我可以构建针对64位操作系统的vc ++应用程序(二进制文件)吗?

我正在使用以下项目选项:

    Name="VCLinkerTool"
    AdditionalOptions="/machine:AMD64 bufferoverflowU.lib"
    OutputFile="\bin\Release\MM64.dll"
    LinkIncremental="1"
    SuppressStartupBanner="TRUE"
    AdditionalLibraryDirectories=""C:\Program Files\Microsoft Platform SDK\Lib\AMD64""
    GenerateDebugInformation="TRUE"
    ProgramDatabaseFile="\bin\Release\MM64.pdb"
    GenerateMapFile="TRUE"
    MapFileName="\bin\Release\MM64.map"
    MapExports="TRUE"
    MapLines="TRUE"
    OptimizeReferences="2"
    EnableCOMDATFolding="2"
    ImportLibrary=".\Release/MM64.lib"
    TargetMachine="0"/>

我收到以下错误:

fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'AMD64'

我是否需要在64位操作系统上构建项目,或者我需要更改项目设置以解决此错误。 请帮我解决这个问题。

5 个答案:

答案 0 :(得分:9)

我今天遇到了同样的问题,这是我解决它的方法(在Visual Studio 2008中): 去项目属性 - >链接器 - >命令行 - >其他选项和从链接器中删除 / MACHINE:I386附加选项。

希望有所帮助

答案 1 :(得分:2)

在VS2008中遇到同样的问题。我的解决方案是更改位于Build - >中的活动解决方案平台。 Configuration Manager并使用x64创建新的解决方案平台并从Win32中复制设置。这使我可以在我的64位操作系统中使用预构建的32位库。

答案 2 :(得分:2)

对于64位Windows用户:

今天我遇到了同样的问题,这是我解决它的方法(在Visual Studio 2008中):我去了:

Project Properties -> Linker -> Command Line -> Additional Options

并从链接器中添加了/MACHINE:I364附加选项。

这对我来说很好。

答案 3 :(得分:1)

当我尝试在Visual Studio 2017中为ARM64构建自定义库时,我遇到了上述错误。我的目标计算机已经按预期运行了ARM64。

显然,问题出在未安装的ARM64编译器中(尽管我可以在ARM64中运行build)。我通过运行Visual Studio Installer Individual Components -> Visual C++ compiler and libraries for ARM64

来安装它

接下来我得到了error MSB8022: Compiling Desktop applications for the ARM platform is not supported 通过添加

解决了这个问题
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|ARM64'" Label="Configuration">
  ...
  <PlatformToolset>v141</PlatformToolset>
  <WindowsSDKDesktopARM64Support>true</WindowsSDKDesktopARM64Support>
</PropertyGroup>

进入我的项目文件。 完成上述所有操作后,我可以在ARM64中成功构建我的项目。

希望它会有用。

答案 4 :(得分:0)

出现此错误是因为您构建的某些内容正在错误的体系结构中编译(比如x86二进制文件,当其他所有内容都是x64时)。链接器发生恐慌,并且不知道如何处理它,因此它会破坏您的构建。 我可以代表您的问题,因为您引用的错误消息不完整。通常它会是这样的:

SOME_KIND_OF_OBJECT.obj: fatal error LNK1112: module machine type 'X86' conflicts with target machine type 'AMD64'

您查看obj文件的名称,并在那里找到问题的根源。无论列出什么obj,都会有一些具有相同名称的类似源代码。看看它,看看它是如何编译的。通常所有这些东西都在VS中自动化,但有时候开发人员会添加特殊的构建步骤。检查自定义,预生成和生成后事件,以查看是否正在使用x86工具进行组装。 VS2010 +中的属性表将特定于obj和平台,因此您可以检查用于验证它们不是32位的库目录。