代码之家  ›  专栏  ›  技术社区  ›  Collin Dauphinee

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

  •  11
  • Collin Dauphinee  · 技术社区  · 14 年前

    我正在尝试用Visual Studio 2005生成一个项目的x64版本。它当前失败,出现链接器错误C1905,“前端和后端不兼容(必须针对同一处理器)。”

    根据我收集到的信息,这本质上是说我的x64构建正试图与x86模块链接。不幸的是,此项目与 很多 不同的图书馆。我不确定是哪个引起了这个问题。

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

    2 回复  |  直到 13 年前
        1
  •  11
  •   Chris Schmich    14 年前

    首先,检查配置管理器(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)"

        2
  •  5
  •   CUP    13 年前

    另一个原因是编译标志。如果一些没有为整个程序优化设置,而另一些没有设置,那么您也将得到这个错误。在VS中有两个这样的设置:一个在一般级别,一个在C++ +优化。由旧版本的vs生成的库没有此集合。由较新版本的Vs生产的那些已经设置好了。

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