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的新版本生成的版本已经设置好了。

查找违规库的唯一方法是逐个关闭它,直到错误消失。