Visual Studio - 查找哪些模块导致C1905(处理器不兼容)
问题描述:
我试图用Visual Studio 2005做一个项目的x64版本。它目前失败,链接器错误C1905,'前端和后端不兼容(必须以同一处理器为目标)。'Visual Studio - 查找哪些模块导致C1905(处理器不兼容)
从我收集的信息来看,这基本上是说我的x64版本试图与x86模块链接。不幸的是,这个项目链接很多不同的图书馆。我不确定哪个是造成问题的原因。
有没有办法从Visual Studio中获取更多信息?
答
首先,检查Configuration Manager(Build> Configuration Manager ...)以确保您正在为同一平台构建所有项目。
如果没有帮助,然后从Visual Studio命令提示符(可从开始菜单),您可以使用dumpbin
以确定您的.lib的架构和做.obj文件如下:
C:\Foo> dumpbin /headers Foo.lib | more
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file Foo.lib
File Type: LIBRARY
FILE HEADER VALUES
14C machine (x86)
3 number of sections
4C6CB9B6 time date stamp Wed Aug 18 21:57:26 2010
113 file pointer to symbol table
8 number of symbols
0 size of optional header
100 characteristics
32 bit word machine
标题值下的第一行告诉你.lib/.obj编译的是哪个体系结构(在本例中为x86)。
如果你有很多链接的中间体,你可以通过这只是为了寻找86(或x64)文件自动执行位:
for /R %f in (*.obj *.lib) do @echo %f && dumpbin /headers %f | findstr /c:"machine (x86)"
答
另一个原因是编译标志。如果有些程序没有为整个程序优化设置,其他程序则不是,那么你也会得到这个错误。 VS中有两个这样的设置 - 一个在常规级别,另一个在C++/Optimization。较早版本的VS生成的库没有这个集合。 VS的新版本生成的版本已经设置好了。
查找违规库的唯一方法是逐个关闭它,直到错误消失。