[visual-c++] 치명적인 오류 LNK1112 : 모듈 시스템 유형 ‘x64’가 대상 시스템 유형 ‘X86’과 충돌

CUDA (VC ++, Visual studio 2008sp1)를 사용하여 FEM 프로그램을 디버깅하고 있습니다. cuda가 부족하기 때문에 Win32 플랫폼에서만 프로그램을 실행할 수 있습니다. 링크 된 라이브러리 파일이 모두 x86 플랫폼에서 컴파일 된 것으로 생각하지만 컴파일 할 때 “치명적 오류 LNK1112 : 모듈 시스템 유형 ‘x64’가 대상 시스템 유형 ‘X86’과 충돌합니다”라는 오류 메시지가 표시됩니다.

플랫폼을 x64로 변환하려고 시도했지만 작동하지 않았습니다. “모듈 머신 유형”이란 무엇이며 “대상 머신 유형”은 무엇입니까? 어떻게 극복 할 수 있습니까?



답변

나는 이 미친 문제에 직면하여 이것에 관한 블로그 항목을 작성 하고 마침내 시스템을 작동 상태로 되돌려 놓았습니다.

다음 순서대로 확인해야합니다.

  1. 속성> 구성 속성> 링커> 고급> 대상 시스템에서 링커 설정의 속성 옵션을 확인하십시오. 64 비트 빌드를 대상으로하는 경우 MachineX64를, 32 비트 빌드를 작성하는 경우 MachineX86을 선택하십시오.

  2. Visual Studio의 기본 메뉴에서 빌드> 구성 관리자를 선택하십시오. 프로젝트에 올바른 플랫폼이 지정되어 있는지 확인하십시오. IDE는 x64를 빌드하도록 설정 될 수 있지만 솔루션의 개별 프로젝트는 win32를 대상으로 설정 될 수 있습니다. 예, 비주얼 스튜디오는 자신을 걸기 위해 많은 밧줄을 남기지 만 그게 인생입니다.

  3. 라이브러리 파일이 실제로 대상 플랫폼 유형인지 확인하십시오. Visual Studio VC \ bin 디렉토리에있는 dumpbin.exe를 사용하여 사용할 수 있습니다. -headers 옵션을 사용하여 모든 기능을 덤프하십시오. 각 기능에 대한 기계 항목을 찾으십시오. 64 비트 빌드 인 경우 x64를 포함해야합니다.

  4. Visual Studio의 기본 메뉴에서 도구> 옵션을 선택하십시오. 프로젝트 및 솔루션> VC ++ 디렉토리를 선택하십시오. 플랫폼 드롭 다운에서 x64를 선택하십시오. 첫 번째 항목이 $ (VCInstallDir) \ bin \ x86_amd64이고 뒤에 $ (VCInstallDir) \ bin 이 있는지 확인하십시오 .

4 단계를 마치면 모든 것이 다시 작동했습니다. 64 비트 대상으로 컴파일하려는 모든 프로젝트 에서이 문제가 발생했습니다.


답변

C Johnson 목록 외에도 다음 사항을 추가합니다.

Visual Studio에서 확인하십시오.
프로젝트 속성-> 구성 속성-> 링커-> 명령 줄.

“추가 옵션”은 포함하지 않아야합니다 /machine:X86

CMake 출력에 의해 생성 된 이러한 키가 있습니다 .CMake 는 x86 프로젝트를 생성 한 다음 Configuration ManagerVisual Studio 2010을 통해 x64 플랫폼을 추가 했습니다. 링커 명령 행을 /machine:X86별도로 지정하지 않고 모든 것이 새 플랫폼에 적합하게 생성되었습니다 .


답변

VS2003에서 변환 된 프로젝트에 X64 빌드를 추가하려고 할 때 VS2008에서 동일한 문제가 발생했습니다.

Google 에서이 오류를 검색 할 때 발견 된 모든 것을 보았습니다 (대상 시스템, VC ++ 디렉토리, 덤프 ….). 모든 것이 정상으로 보였습니다.

마지막으로 새로운 테스트 프로젝트를 만들고 동일한 변경 작업을 수행하여 작동하는 것 같습니다.

vcproj 파일 사이의 차이점을 확인하면 문제가 드러났습니다 ….

변환 된 프로젝트에는 링커-> 명령 줄에서 / MACHINE : i386이 추가 옵션으로 설정되어 있습니다. 따라서 두 개의 / MACHINE 옵션 세트 (x64 및 i386 모두)가 있었고 추가 옵션이 선호되었습니다.

이것을 제거하고 링커-> 고급-> 대상 머신에서 올바르게 설정하면 문제가 사라졌습니다.


답변

모든 프로젝트 설정이 완벽 해 보였지만 여전히 오류가 발생했습니다. .vcxproj파일을 살펴보고 “x86″을 검색하면 문제가 발견되었습니다.

<Lib>
  <AdditionalOptions> /machine:X86 %(AdditionalOptions)</AdditionalOptions>
</Lib>

모든 발생 (10 개의 개별 파일 설정)에 대한 빠른 검색 / 바꾸기가 문제를 해결했습니다.


답변

컴파일 및 대상 시스템 사양 (x86 및 x64)의 차이로 인해 문제가 발생하므로 다음 단계를 수행하십시오.

  1. 구성하려는 C ++ 프로젝트를여십시오.
  2. 구성 관리자 버튼을 선택하여 구성 관리자 대화 상자를 엽니 다.
  3. 활성 솔루션 플랫폼 드롭 다운 목록에서 새 솔루션 플랫폼 대화 상자를 여는 옵션을 선택하십시오.
  4. 유형 또는 새 플랫폼 드롭 다운 목록에서 64 비트 플랫폼을 선택하십시오.

내 문제를 해결했습니다.


답변

x86을 대상으로하는 x64 (대상 시스템 유형)를 대상으로하는 하나의 .OBJ 또는 .LIB 파일이있을 수 있습니다.

.OBJ 파일에서 DUMPBIN / HEADERS를 사용하고 FILE HEADER VALUES 블록에서 시스템 항목을 확인하십시오.


답변

Visual Studio 2012 +/-에서 “Configuration Properties’.Linker.”Command Line “의 속성 페이지에는”Additional Options “라는 상자가 포함되어 있습니다. x64를 빌드하는 경우 상자에 / MACHINE이 포함되어 있지 않은지 확인하십시오. I386. 프로젝트에서 문제가 발생했습니다.