2010-08-20 3 views
10

Sto tentando di creare una versione x64 di un progetto con Visual Studio 2005. Attualmente non riesce con l'errore C1905 del linker, 'Front end e back end non compatibili (deve indirizzare lo stesso processore). 'Visual Studio: individuazione dei moduli che causano C1905 (incompatibilità del processore)

Da quello che ho capito, questo essenzialmente sta dicendo che la mia build x64 sta tentando di collegarsi con i moduli x86. Sfortunatamente, questo progetto si collega con un sacco di di diverse librerie. Non sono sicuro di quale sia la causa del problema.

C'è un modo per ottenere più informazioni da Visual Studio?

risposta

10

Prima di tutto, selezionare Configuration Manager (Build> Configuration Manager ...) per assicurarsi di creare tutti i progetti per la stessa piattaforma.

Se questo non aiuta, poi dal Studio Command Prompt Visuale (disponibile dal menu Start), è possibile utilizzare dumpbin per determinare l'architettura del vostro .lib e obj file effettuando le seguenti operazioni:

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 

La prima riga sotto i valori dell'intestazione indica quale architettura è stata compilata .lib/.obj (in questo caso x86).

Se si dispone di un sacco di intermedi legati, si potrebbe automatizzare questo un po 'da solo in cerca di x86 (o x64) file:

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

5

Un altro motivo è la flag di compilazione. Se alcuni non sono impostati per l'ottimizzazione dell'intero programma e altri no, allora riceverai anche questo errore. Ci sono due impostazioni di questo tipo in VS: una a livello generale e una a C++/ottimizzazione. Le librerie prodotte da versioni precedenti di VS non avevano questo set. Quelli prodotti dalle versioni più recenti di VS hanno impostato.

L'unico modo per scoprire le librerie offensive è eliminarle una alla volta fino a quando l'errore non scompare.

Problemi correlati