2009-08-03 7 views
6

3 대의 빌드 머신이 있습니다. 하나는 Windows 2000에서, 하나는 XP SP3으로, 다른 하나는 64bit Windows Server 2008에서 실행됩니다. 그리고 Visual Studio 2005 SP1을 사용하여 구축 할 기본 C++ 프로젝트가 있습니다. 제 목표는이 빌드 머신을 사용하여 동일한 DLL을 "정확히"빌드하는 것입니다.다른 시스템에 동일한 빌드

정확하게는 비트별로 의미합니다 (물론 타임 스탬프를 제외하고는).

win2k와 winxp에서 나는 동일한 dll 파일을 가지고 있습니다. 그러나 그들은 win2008 서버로 빌드 된 dll과 다릅니다. 거의 동일한 dll을 얻을 수 있었지만 몇 가지 차이점이 있습니다. 파일을 분해 한 후에 함수 순서가 같지 않음을 알았습니다 (3 개의 함수가 다른 순서 임).

누군가가 그 이유가 무엇인지 알 수 있습니까?

사이드 질문 : vcbuild.exe에서 스위치/주문을 찾았습니다. 함수 주문 파일을 입력으로 사용합니다. 누구나 파일이 어떻게 보이는지 알고 있습니다.

+0

32 비트 호환성 모드에서 VS를 실행 해 보았습니까? – Makis

+0

32 비트 compat에서 실행해야합니다. Visual Studio AFAIK – ppiotrowicz

+1

의 64 비트 버전이 없습니다. 1. Server 2008 컴퓨터가 다른 CPU를 실행하고 있습니까? (나는 AMD 기계가 인텔에 경미하게 다른 산출을 일으키는 유사한 문제점을 한 번 보았다 - 이상하지만 진실한). 2. 설치된 업데이트를 확인하여 VS 구성 요소가 변경된 항목이 있는지 확인 했습니까? –

답변

7

컴파일은 순전히 결정 론적이라고 할 수 있습니다 (동일한 입력은 매번 동일한 출력을 제공함). 그러나 그럴 필요는 없습니다. 예를 들어 옵티 마이저를 고려해보십시오.이 방법을 사용하려면 약간의 메모리가 필요하며, 더 높은 최적화 방법을 위해서는 더 많은 메모리가 필요합니다. 한 시스템에서 메모리 할당이 실패하면 (시스템의 메모리가 적어지기 때문에) 컴파일러는 해당 최적화를 생략하여 다른 코드가 생성되도록 할 수 있습니다.

비슷한 상황이 많아서 할 수없는 일에 많은 노력을 기울일 수 있습니다. 왜 어쨌든 DLL이 비트와 동일해야합니까?

+0

최적화가 해제되어 있으면 (/ Od 스위치) 동일한 문제가 발생합니다. 이 프로젝트에서는 비트 동등성이 매우 중요합니다. 왜 그런지, 미안합니다. – ppiotrowicz

+2

최적화 작업은 그저 하나의 예일뿐입니다. 컴파일러가 다른 결과를 낼 수있는 많은 것들이 있습니다. –

0

체인 도구 (컴파일러, 링커, ...)의 동일한 버전을 실행하고 32/64 비트 차이가 있습니까?

+0

예, SP1이있는 모든 곳에서 vs2005로 빌드하고 있습니다 (.net 2.0 SP1도 함께 설치됨). win32 플랫폼에 빌드. – ppiotrowicz

+0

Win2008에서 32 비트 버전의 컴파일러와 링커를 사용하고 있습니까? – AProgrammer

+0

예, 확실합니다. 그들은 Program Files (x86) – ppiotrowicz

0

Windows Server 2008은 64 비트를 실행하는 유일한 컴퓨터입니까? 그렇다면 문제가 될 수 있습니다.

+0

에 있을지도 모르지만 32 비트 시스템의 dll은 거의 동일합니다. 유일한 차이점은 _3_ 함수의 순서가 다르다는 것입니다 (프로젝트에 많은 함수가 있음). 디 어셈블 된 코드는 거의 같습니다. – ppiotrowicz

관련 문제