2009-11-02 3 views
0

C를 사용하여 Windows 명령 행 도구를 개발하고 VC++에서 컴파일하고 때로는 돌아와서 소스 코드를 체크인했습니다. 체크인하기 전에 프로젝트를 정리했는데 다른 프로젝트 외에 .exe, .obj 파일도 삭제되었습니다. 나는 명령 행 도구를 계속 사용했다.동일한 코드를 다시 컴파일하면 VC++에서 다른 실행 파일이 생성됩니다.

두 달 후 다시 컴파일 된 소스를 체크 아웃했지만 생성 된 EXE 파일이 이전에 컴파일 된 버전과 일치하지 않습니다.

내 질문

,

는 VC에 의해 생성 된 실행 파일이 재 컴파일로 변경 ++ 있습니까? 아니면 뭔가 빠졌습니까?

+1

마크 루샤 코프 (Mark Rushakoff)가 아래 지적했듯이 이것은 정확한 복제입니다. http://stackoverflow.com/questions/1363217/binary-reproducibility-in-visual-c –

+1

관련 항목 : http://stackoverflow.com/questions/1426333/reproducable-md5-sha-on-a-c-exe 재 작성 –

답변

6

this question의 답변을 보면 VS가 매번 동일한 이진수를 출력하도록 할 수는 없습니다. 컴파일러는 타임 스탬프와 같은 일부 메타 데이터를 실행 파일에 포함하므로 바이너리 파일이 컴파일간에 동일하지 않습니다. 상태가 또한 this MSDN blog post에 링크 된 답변

하나 :

... 컴파일러 작가이다 배치되어 생성되는 어떤 것을 제대로 생성 코드를 작동하고 생성 빨리보다는 보장에 훨씬 더 관심 하드 드라이브에서 동일하게 작동합니다. 코드 최적화를위한 다양하고 다양한 방법과 구현으로 인해 하나의 빌드가 다른 빌드보다 약간의 시간이 걸리거나 다른 것을 할 수있는 가능성이 항상 있습니다. 따라서, 최종 결과는 동일한 기능성에 대한 상이한 비트 세트 일 수있다.

그래서, 당신의 대답은 이진 파일은 비트 하나 동일하지, 그래,하지만 그들은 기능적으로 동일해야합니다.

관련 문제