2010-08-20 2 views
10

Visual Studio 2005에서 x64 빌드를 만들려고합니다. 현재 링커 오류 C1905 인 '프런트 엔드와 백 엔드가 호환되지 않습니다 동일한 프로세서를 대상으로해야 함). 'Visual Studio - C1905 (프로세서 비 호환성)를 일으키는 모듈 찾기

제가 수집 한 것으로부터, 이것은 본질적으로 제 x64 빌드가 x86 모듈과 연결을 시도하고 있음을 말합니다. 불행하게도,이 프로젝트는 과 다른 라이브러리로 많은과 연결됩니다. 나는 그 문제의 원인이 무엇인지 모르겠습니다.

Visual Studio에서 더 많은 정보를 얻을 수있는 방법이 있습니까?

답변

10

먼저 구성 관리자 (빌드> 구성 관리자 ...)를 확인하여 동일한 플랫폼에 대해 모든 프로젝트를 빌드하고 있는지 확인하십시오.

이 도움이되지 않는 경우, (시작 메뉴에서 가능)는 Visual Studio 명령 프롬프트, 다음 당신의 lib 디렉토리의 구조를 결정하고 수행하여 파일을 .OBJ하는 dumpbin을 사용할 수 있습니다에서 :

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)를 알려줍니다.

당신이 링크 된 중간체가 많은 경우, 당신은 단지 86 (또는 64)에 대한 파일을 보면이 조금을 자동화 할 수 있습니다 :

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

5

또 다른 이유는 컴파일 플래그입니다. 일부 프로그램이 전체 프로그램 최적화를 위해 설정되지 않은 프로그램과 그렇지 않은 프로그램이있는 경우이 오류가 발생합니다. VS에는 두 가지 설정이 있습니다 - 하나는 일반 수준, 다른 하나는 C++/최적화입니다. 이전 버전의 VS에서 생성 된 라이브러리에는이 세트가 없습니다. 최신 버전의 VS에서 생성 된 것입니다.

오류가있는 라이브러리를 찾는 유일한 방법은 오류가 사라질 때까지 한 번에 하나씩 꺼내는 것입니다.

관련 문제