2011-09-20 2 views
1

x86 및 x64 아키텍처 용으로 컴파일하려고하는 C++ Visual Studio 프로젝트가 있습니다. 내가 봤 거든 그것을 할 수있는 방법에 대한 많은 정보를 발견하고 그것이 작동하는 것, 그러나 그것은 커튼 뒤에 무슨 일이 일어나고 있는지에 대해 깊이 혼란스러워했다.다중 플랫폼 컴파일을 위해 컴파일러와 링커 간의 상호 작용을 이해하려고 시도합니다.

이 설정의 유일한 차이점은 링커 명령 줄 플래그의 스위치입니다 (정확하게는/MACHINE 플래그 임). 오브젝트 파일의 순서로되어 있기 때문에, 어떻게 든 나는 항상 그것을 가정 것의 정반대이다 - 즉 그러나 사건의 경우

는 다음 컴파일의 오브젝트 파일은 플랫폼 독립해야합니다 플랫폼 코드는 이어야합니다.

내 질문은 : 빌드 프로세스의 일부가 생각했던 방식대로 동작하지 않습니다.

시간과 지혜에 감사드립니다.

마이클

+0

GCC *가 아키텍처 종속적 인 오브젝트 파일을 생성하기 때문에 Visual C++ 태그가 추가되었습니다. –

답변

0

32 비트 x86 용으로 컴파일, 비주얼 스튜디오 컴파일러 \ 프로그램 파일 \ 마이크로 소프트 비주얼 스튜디오 10.0 \ VC \ 빈 \의 CL.EXE를 사용합니다. 64 비트 x86 용으로 컴파일 할 때 Visual Studio는 compiler \ Program Files \ Microsoft Visual Studio 10.0 \ VC \ bin \ amd64 \ cl.exe를 사용합니다. 첫 번째 컴파일러는 32 비트 오브젝트 파일을 생성하고 두 번째 컴파일러는 64 비트 오브젝트 파일을 생성합니다. 이것은 지정된 아키텍처를보기 위해 오브젝트 파일에서 dumpbin.exe를 실행하여 볼 수 있습니다.

컴파일러 호출은 동일하게 유지됩니다 (빌드하기 전에 설정 한 실행 파일 $ PATH가 변경되었습니다). PATH를 32 비트 또는 64 비트 디렉토리로 지정하면 프로젝트를 빌드하기 위해 실행되는 전체 프로그램 세트가 변경됩니다. Project Properties> Configuration Properties> VC++ Directories> Executable Directories를보고 "Edit"를 클릭하면이 것을 볼 수 있습니다. "상속 된 값"상자에 현재 구성 및 플랫폼의 경로가 표시됩니다.

+0

고마워, 이건 내 정신을 복원하는 것, 실제로, 나는 다른 디렉토리 설정을 발견. 유닉스 배경에서 꽤 비 직관적 인 생각이 들지만, 그 배경을 알 수있을 것 같다. –