3

我在 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 位操作系统上构建项目还是需要更改项目设置才能解决此错误。请帮我解决这个问题。

4

5 回答 5

9

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

希望能帮助到你

于 2010-04-03T20:36:40.067 回答
2

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

于 2011-08-23T15:23:36.410 回答
2

对于 64 位 Windows 用户:

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

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

并添加了/MACHINE:I364来自链接器的附加选项。

这对我来说很好。

于 2013-09-12T09:09:21.083 回答
1

当我尝试在 Visual Studio 2017 中为 ARM64 构建自定义库时,我遇到了上述错误。而且我的目标机器已经如预期的那样是 ARM64。

显然,问题出在未安装的 ARM64 编译器中(尽管我可以在 ARM64 中运行构建)。我通过运行 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 中成功构建我的项目。

希望它会有用。

于 2017-12-07T07:50:04.060 回答
0

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

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 位的库目录。

于 2017-01-28T21:23:38.370 回答