Answers:
遇到这个令人抓狂的问题时,我写了一篇关于此的博客文章,最后使系统恢复正常工作。
这些是要检查的事情,按此顺序:
在以下链接器设置中检查属性选项:属性>配置属性>链接器>高级>目标计算机。如果要针对64位版本,请选择MachineX64;如果要进行32位版本,请选择MachineX86。
从Visual Studio的主菜单中选择“构建”>“配置管理器”。确保您的项目具有指定的正确平台。可以将IDE设置为构建x64,但可以将解决方案中的单个项目设置为以win32为目标。是的,Visual Studio留下了很多绳子来吊死自己,但这就是生活。
检查您的库文件,使其确实属于目标平台类型。可以通过使用Visual Studio VC \ bin目录中的dumpbin.exe来使用它。使用-headers选项转储所有功能。查找每个功能的机器条目。如果是64位版本,则应包含x64。
在Visual Studio中,从主菜单中选择“工具”>“选项”。选择项目和解决方案> VC ++目录。从平台下拉列表中选择x64。确保第一个条目是:$(VCInstallDir)\ bin \ x86_amd64,后跟$(VCInstallDir)\ bin。
一旦执行了第4步,一切都对我有效。问题是我在所有要编译为64位目标的项目中都遇到了这个问题。
除了C Johnson清单,我还要补充以下几点:
在Visual Studio中签入:
项目属性->配置属性->链接器->命令行。
“其他选项”不应包含 /machine:X86
我有这样的密钥,由CMake输出生成:CMake生成了x86项目,然后Configuration Manager
在Visual Studio 2010中通过添加了x64平台-对于新平台,一切都很好地创建了,除了链接程序命令行是/machine:X86
单独指定的。
当我尝试将X64版本添加到从VS2003转换的项目中时,在VS2008中遇到了相同的问题。
我查看了在Google上搜索此错误时发现的所有内容(目标计算机,VC ++目录,DUMPBIN ....),一切看起来都还可以。
最终,我创建了一个新的测试项目,并进行了相同的更改,并且看起来可行。
在vcproj文件之间做一个比较就发现了问题。
我转换后的项目将/ MACHINE:i386设置为链接器->命令行下的附加选项。因此,有两个/ MACHINE选项集(x64和i386),另外一个则优先。
删除它并在“链接器”->“高级”->“目标计算机”下正确设置,该问题消失了。
我在构建QT时遇到了这个问题。我在某处阅读的说明建议我使用VS命令提示符配置nmake。
我选择了x64命令提示符,并进行了许多麻烦的配置。当我尝试nmake时,它给出了此错误。
我认为某些组件是针对32位预先构建的。该错误甚至报告了为x86构建的模块。
我使用了32位的默认VS命令提示符,它起作用了。
除了Jhonson的清单之外,还检查图书馆的文件夹
在Visual Studio中,从主菜单中选择“工具”>“选项”。选择项目和解决方案> VC ++目录。从平台下拉列表中选择x64。
$(VCInstallDir)lib\AMD64;
$(VCInstallDir)atlmfc\lib\amd64;
$(WindowsSdkDir)lib\x64;
今天发生了这件事,因为我仍然在x86模式下添加了一个库目录,并且不小心删除了继承的目录,而是对其进行了硬编码。然后,切换到x64后,我的VC ++目录仍然显示为:
“ ...; $(VC_LibraryPath_x86); $(WindowsSDK_LibraryPath_x86);”
而不是_x64。
$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64);$(NETFXKitsDir)Lib\um\x64;
这是一个非常令人沮丧和烦人的问题,但是一旦您理解它,它就非常简单:尽管构建对象是另一种类型的对象(例如x86),但您正在构建某种元素来构建一种体系结构类型(在您的情况下为x64)。 )。
您可以通过查看导致崩溃的obj文件来剖析问题的根源,然后开始在其中查找问题。每个obj都有一个源代码类似物:cpp,c,asm等。围绕它的特殊构建事件可能使用了错误的工具。在属性表中进行检查。
在查看C Johnson要做的事情之前,我先来看一下。
首先尝试以下操作:1.转到Configuration Manager并创建一个新的x64(如果尚未安装)。2.选择x64解决方案。3.转到项目属性,然后在Linker-> Advanced中选择x64计算机。4.现在重建解决方案。
如果仍然出现相同的错误。尝试使用干净的解决方案,然后重新构建并打开Visual Studio,您将获得最近打开的项目的列表,右键单击该项目并将其从此处删除。现在转到解决方案,然后再次重新打开解决方案。
对于某些使用命令提示符(dos提示符)的用户可能会有所帮助:
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" --help
Error in script usage. The correct usage is:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option]
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] store
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] [version number]
or
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" [option] store [version number]
where [option] is: x86 | amd64 | arm | x86_amd64 | x86_arm | amd64_x86 | amd64_arm
where [version number] is either the full Windows 10 SDK version number or "8.1" to use the windows 8.1 SDK
:
The store parameter sets environment variables to support
store (rather than desktop) development.
:
For example:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_arm store
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_amd64 10.0.10240.0
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x86_arm store 10.0.10240.0
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 8.1
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64 store 8.1
:
Please make sure either Visual Studio or C++ Build SKU is installed.
另外,如果您这样做:
CL“%1%2%3” / EHsc / link user32.lib Gdi32.lib Winmm.lib comctl32.lib * .obj / SUBSYSTEM:CONSOLE / MACHINE:x86
你必须德尔* .OBJ 前 ; 为了避免将链接器与先前编译留下的64位和32位对象混淆?