我在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位操作系统上构建项目,或者我需要更改项目设置以解决此错误。 请帮我解决这个问题。
答案 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位的库目录。