添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams

I'm attempting to make an x64 build of a project with Visual Studio 2005. It's currently failing with linker error C1905, 'Front end and back end not compatible (must target same processor).'

From what I gather, this is essentially saying that my x64 build is attempting to link with x86 modules. Unfortunately, this project links with a lot of different libraries. I'm not sure which is the one causing the problem.

Is there any way to get more information out of Visual Studio?

First, check Configuration Manager (Build > Configuration Manager...) to ensure that you're building all of your projects for the same platform.

If that doesn't help, then from the Visual Studio Command Prompt (available from the Start menu), you can use dumpbin to determine the architecture of your .lib and .obj files by doing the following:

C:\Foo> dumpbin /headers Foo.lib | more
Microsoft (R) COFF/PE Dumper Version 10.00.30319.01
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

The first line under the header values tells you which architecture the .lib/.obj was compiled for (in this case, x86).

If you have a lot of linked intermediates, you could automate this a bit by just looking for x86 (or x64) files:

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

Another reason is the compilation flags. If some are not set for whole program optimization and others are not, then you will also get this error. There are two such settings in VS - one at the General level and one at C++/Optimization. Libraries produced by older versions of VS did not have this set. The ones produced by the newer versions of VS have it set.

The only way to find out offending libraries is to take them off one at a time until the error disappears.

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.