Visual Studio - 查找导致C1905的哪些模块(处理器不兼容)

时间:2010-08-20 04:21:11

标签: c++ visual-studio module linker 64-bit

我正在尝试使用Visual Studio 2005创建项目的x64版本。它目前因链接器错误C1905失败,“前端和后端不兼容(必须针对相同的处理器)。”

从我收集的内容来看,这基本上是说我的x64版本试图与x86模块链接。不幸的是,这个项目与很多的不同库相关联。我不确定导致问题的是哪一个。

有没有办法从Visual Studio中获取更多信息?

2 个答案:

答案 0 :(得分:11)

首先,检查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)。

如果您有很多链接的中间体,只需查找x86(或x64)文件就可以自动执行此操作:

for /R %f in (*.obj *.lib) do @echo %f && dumpbin /headers %f | findstr /c:"machine (x86)"

答案 1 :(得分:5)

另一个原因是编译标志。如果某些未设置为整个程序优化而其他未设置,那么您也会收到此错误。 VS中有两个这样的设置 - 一个在General级别,一个在C ++ / Optimization。旧版VS生成的库没有这个集合。由较新版本的VS生成的那些设置。

找出有问题的库的唯一方法是一次取消一个,直到错误消失。