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

Col*_*nee 12 c++ 64-bit linker module visual-studio

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

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

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

Chr*_*ich 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
Run Code Online (Sandbox Code Playgroud)

标头值下的第一行告诉您编译.lib/.obj的架构(在本例中为x86).

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

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


小智 5

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

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