2017-06-09 53 views
0

我有一个包含许多dll和exe项目的应用程序。我正在移植到64位版本,几乎一切正常。但是,我有一个exe项目无法在64位配置中正确构建。奇怪的是,它不会从IDE构建命令构建。如果我打开一个64位的VS命令窗口并使用msbuild构建,它确实可以构建。Visual Studio 2010 IDE没有目标架构错误IDE 64位版本

我看了一些其他类似的问题和答案,通常指的是一个额外的(或缺少)windows.h包括但很难确定这是否是同一件事。我已经尝试了包含的不同组合,但我没有看到明确的问题。

我可以在VS IDE中构建项目作为32位exe 我无法在VS IDE中将项目构建为64位exe 我可以在64位命令窗口中构建项目,如下所示:一个64位的exe

我有_WIN64和_AMD64定义为预处理器定义。

如果我使编译器选项,以显示包括,我看到:

 
1> Note: including file: c:\dev\projects\myapp\myproject.root\myproject\stdafx.h 
1> Note: including file: c:\dev\projects\myapp\myproject.root\myproject\targetver.h 
1> Note: including file: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\SDKDDKVer.h 
1> Note: including file: c:\dev\projects\myapp\myproject.root\myproject\resource.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlbase.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atldef.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\atlmfc\include\atlrc.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\errno.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\sal.h 
1> Note: including file:  c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h 
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\codeanalysis\sourceannotations.h(27): error C2371: 'size_t' : redefinition; different basic types 
1>   predefined C++ types (compiler internal)(19) : see declaration of 'size_t' 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\vadefs.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\malloc.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdlib.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\limits.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdbg.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winsock2.h 
1> Note: including file: C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windows.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\excpt.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\stdarg.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\windef.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\ctype.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\crtdefs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings.h 
1> Note: including file:  c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sal_supp.h 
1> Note: including file:  c:\program files (x86)\microsoft sdks\windows\v7.0a\include\specstrings_supp.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings_strict.h 
1> Note: including file:   C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\specstrings_undef.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\driverspecs.h 
1> Note: including file:   c:\program files (x86)\microsoft sdks\windows\v7.0a\include\sdv_driverspecs.h 
1> Note: including file:  C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\kernelspecs.h 
1>C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\include\winnt.h(135): fatal error C1189: #error : "No Target Architecture" 

有什么建议?

+0

在项目设置中,您无需定义'_WIN64'或'_AMD64'您只需将项目平台设置为x64并将连接器目标机器设置为machine64即可。 – VTT

+0

有趣。我删除了这些定义,现在一切编译正确,但我得到一个链接器错误:“致命错误LNK1112:模块机器类型'X86'与目标机器类型'x64'”冲突。我有'x64'作为平台,连接器设置设置为机器类型X64。 – Ken

+0

也许你对一个翻译单元有不同的设置?例如对于预编译头文件.cpp? – VTT

回答

0

我想我已经得到了答案。我将我的项目设置与我创建的一个新的空白项目进行了比较。可执行目录的VC++目录条目与我的不同。

以此开头的默认目录: $(VCInstallDir)bin \ x86_amd64;

我现有的项目没有这个。我将它添加到我的64位平台调试和发布配置项目中,现在我可以构建64位版本。而且我仍然可以构建32位版本。

我假设该目录是64位编译器和链接器驻留的地方。如果这是正确的,错误“没有目标体系结构”似乎是一个奇怪的错误消息给出的条件。