2017-12-07 3 views
0

시나리오 : (gcc가있는 Linux에서) C++ 프로젝트 빌드가 새 시스템에서 반복되는 것으로 가정됩니다.Linux/gcc : 빌드가 다른 머신의 이전 빌드와 동일한 지 확인하는 방법이 있습니까?

매우 동일한 gcc 버전을 빌드에 사용하는 경우 : 빌드 출력 (바이너리)이 동일합니까? 또는 바이너리에 포함 된 타임 스탬프, 경로 또는 다른 정보가 다른 것입니까? 출력이 동일하지 않은 경우 : 출력이 바이너리가 "기능적"입니까 동일한 지 비교할 수 있습니까? 나는. 디버그 정보와 같은 메타 데이터가없는 바이너리 내부의 실제 코드를 비교하는 도구를 호출 할 수 있습니까?

동기 부여 : 소프트웨어 시스템 (누군가 다른 사람이 개발했으며, X라고 부름)이 만들어 져야하는 깨끗한 새 Linux 시스템을 준비해야합니다. 소프트웨어를 빌드하기 위해 빌드 스크립트, 메이크 파일 등을 포함한 소스 트리를 얻을 것입니다. 이제 빌드 출력이 X에서 제공 한 마지막 빌드와 동일하다는 것을 확인해야합니다. 넘겨 줄 소스가 X에서 바이너리 형식으로 얻은 마지막 버전을 빌드하는 데 사용 된 것과 동일해야합니다.

+0

2 개의 파일에서'objdump -d FILE' 명령의 출력의'diff' 명령을 사용하여 차이를 비교해 보았습니까? – Oliv

+0

최종 목표는 무엇입니까? 이진 호환성, 또는 기능적 정확성? 전자는 ABI의 일종에 동의 할 필요가 있습니다. 후자는 체계적인 테스트가 전부라고 생각합니다. –

+0

@MassimilianoJanes :이 문제의 동기를 설명하기 위해 질문을 편집했습니다. – DrP3pp3r

답변

1

매우 동일한 gcc 버전이 사용되는 경우 빌드 : 빌드 출력 (바이너리)이 동일합니까?

CPU가 GCC의 버전과 정적 연결보다 어떤 변화가 있습니까? 나는 당신이 찾고있는 대답이 거짓말이라고 믿는다 here.

기본적으로 "달라집니다"는 다우입니다. 은 RICI에 의해 링크 된 대답을 인용 :

바이너리는 CPU가 비슷하지 않으면 다를 가능성이

을 (그리고 그렇다하더라도, 그것은 가능) 그리고 Oliv 말한 것처럼, objdump도 좋은 방법입니다 그 차이를 비교하기.

+0

흥미 롭습니다. ARM 용으로 크로스 컴파일 할 때 호스트 CPU가 대상에 대한 최적화에 영향을 미치지 않아야하므로 CPU 관련 최적화 문제가 해결되어야합니다. – DrP3pp3r

관련 문제